URL 内容的高级检查(字符数,* 运算符)
Advanced checking of URL content (characters count, * operator)
我正在构建 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”以及“ba”和“.ipfs”之间的所有内容(* 在 Shell/Bash 上运行的运算符)?使用什么运算符和语法调整?
此外,还有一个好处:如何包含在这个检测中,以及 count/validate 这个起始“ba”在协议 (https://) 和 .ipfs 之后有多少个字符,就像这里的“https” ://bafybeignbgeutsyhunhidcki63wmvmjfib7xipmiorwlt3o27aot2ydgwu.ipfs。”那是“bafybeignbgeutsyhunhidcki63wmvmjfib7xipmiorwlt3o27aot2ydgwu”(应该是 59 个字符)?
你听说过正则表达式(regex)吗?
对于您的情况,您可以尝试将 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
奖金问题:
const url = "https://bafybeifoowqb5fhp7vlusauhshfhiygd3g2hgxjkrlnuccw5lx6umrb5oy.ipfs.";
const matches = /ba(.*)\.ipfs\./.exec(url);
console.log(matches[1].length);
您不应该天真地匹配 ba
(base32 中的 CIDv1)和 Qm
(Base58 中的 CIDv0)前缀,因为 CIDv1 可以在不同的基(docs)中编码。
使用能够正确检测 URL 和路径中的 CID 的专用库:
https://www.npmjs.com/package/is-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”以及“ba”和“.ipfs”之间的所有内容(* 在 Shell/Bash 上运行的运算符)?使用什么运算符和语法调整?
此外,还有一个好处:如何包含在这个检测中,以及 count/validate 这个起始“ba”在协议 (https://) 和 .ipfs 之后有多少个字符,就像这里的“https” ://bafybeignbgeutsyhunhidcki63wmvmjfib7xipmiorwlt3o27aot2ydgwu.ipfs。”那是“bafybeignbgeutsyhunhidcki63wmvmjfib7xipmiorwlt3o27aot2ydgwu”(应该是 59 个字符)?
你听说过正则表达式(regex)吗?
对于您的情况,您可以尝试将 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
奖金问题:
const url = "https://bafybeifoowqb5fhp7vlusauhshfhiygd3g2hgxjkrlnuccw5lx6umrb5oy.ipfs.";
const matches = /ba(.*)\.ipfs\./.exec(url);
console.log(matches[1].length);
您不应该天真地匹配 ba
(base32 中的 CIDv1)和 Qm
(Base58 中的 CIDv0)前缀,因为 CIDv1 可以在不同的基(docs)中编码。
使用能够正确检测 URL 和路径中的 CID 的专用库:
https://www.npmjs.com/package/is-ipfs