#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/
Но первые не сработали:
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.