Расширенная проверка содержимого URL-адреса (количество символов, оператор*)

#javascript #url #character #detection #ipfs

Вопрос:

Я создаю FrameworkJS, и одно из его применений-обнаружение его среды.

Недавно я добавил эти 3 условия, чтобы определить, содержит ли URL-адрес нужный текст:

 if(window.location.href.indexOf("ba"*".ipfs.") > -1) {
       alert("Alert: IPFS!");
}

if(window.location.href.indexOf("/ipfs/Qm") > -1) {
       alert("Alert: IPFS!");
}

if(window.location.href.indexOf("/ipfs/ba") > -1) {
       alert("Alert: IPFS!");
}
 

Он отображает предупреждение при обнаружении среды IPFS.

Только последние два сработали:

https://ipfs.io/ipfs/Qmc92ioRvt1KB18GanLUq8qMrXoTeaj4m9iXX3NmjaYWTN/

https://ipfs.io/ipfs/bafybeignbgeutsyhunhidcki63wmvmjfib7xipmiorwlt3o27aot2ydgwu/#x-ipfs-companion-no-redirect

Но первые не сработали:

https://bafybeignbgeutsyhunhidcki63wmvmjfib7xipmiorwlt3o27aot2ydgwu.ipfs.dweb.link/#x-ipfs-companion-no-redirect

 if(window.location.href.indexOf("ba"*".ipfs.") > -1) {
       alert("Alert: IPFS!");
}
 

Как проверить, содержит ли URL-адрес «ba» и все (* оператор, который работает с оболочкой/Bash) между «ba» и «.ipfs»? Какую настройку оператора и синтаксиса использовать?

Кроме того, бонус: как включить это обнаружение и подсчитать/проверить, сколько символов имеет это начальное «ba» после протокола (https://) и .ipfs., как здесь «https://bafybeignbgeutsyhunhidcki63wmvmjfib7xipmiorwlt3o27aot2ydgwu.ipfs.» то есть «bafybeignbgeutsyhunhidcki63wmvmjfib7xipmiorwlt3o27aot2ydgwu» (должно быть 59 символов)?

Ответ №1:

Вы слышали о регулярных выражениях (регулярных выражениях)?

В вашем случае вы можете попробовать сопоставить URL-адрес с /ba(.*).ipfs./

Таким образом, ваш код будет выглядеть примерно так:

 if(window.location.href.match(/ba(.*).ipfs./)) {
       alert("Alert: IPFS!");
}
 

Не стесняйтесь протестировать здесь: https://regex101.com/

Вы можете узнать больше о регулярных выражениях в Javascript здесь: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions

Комментарии:

1. Ваш ответ действует как заклинание. bafybeiagqiib62jmsaephxiiknfu652k3exxgebk6xge3fxxku6eb4entm.ipf… Спасибо!

2. Также работает локально с установленным рабочим столом IPFS: bafybeiagqiib62jmsaephxiiknfu652k3exxgebk6xge3fxxku6eb4entm.ipf…

Ответ №2:

Бонусный вопрос:

 const url = "https://bafybeifoowqb5fhp7vlusauhshfhiygd3g2hgxjkrlnuccw5lx6umrb5oy.ipfs.";

const matches = /ba(.*).ipfs./.exec(url);

console.log(matches[1].length); 

Комментарии:

1. когда я заменяю "https://bafybeiagqiib62jmsaephxiiknfu652k3exxgebk6xge3fxxku6eb4entm.ipfs.infura-ipfs.io/#x-ipfs-companion-no-redirect" на window.location.href , консоль говорит: Uncaught TypeError: matches is null

2. Вот как я это переосмыслил: codepen.io/daniellmesquita/pen/YzVojwK?editors=1111

3. Как заменить буквальный текст "https://bafybeiagqiib62jmsaephxiiknfu652k3exxgebk6xge3fxxku6eb4entm.ipfs.infura-ipfs.io/#x-ipfs-companion-no-redirect" на window.location.href ?

Ответ №3:

Вы не должны наивно сопоставлять ba префиксы (CIDv1 в base32) и Qm (CIDv0 в Base58), так как CIDv1 может быть закодирован в другой базе (документы).

Используйте специальную библиотеку, которая правильно определяет CID в URL-адресах и путях:
https://www.npmjs.com/package/is-ipfs

Комментарии:

1. Большое спасибо! Это наилучший подход для определения среды IPFS.