URL内容的高级检查(字符数,*运算符)



我正在构建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"和所有(在Shell/Bash上工作的*操作符)之间的"one_answers".ipfs干净吗?使用什么操作符和语法调整?

还有一个额外的好处:如何在这个检测中包含,并计数/验证这个开头的"ba"具有后协议(https://)和.ipfs)。,比如这里"https://bafybeignbgeutsyhunhidcki63wmvmjfib7xipmiorwlt3o27aot2ydgwu.ipfs."这是"bafybeignbgeutsyhunhidcki63wmvmjfi7xipmiorwlt3o27aot2ydgwu";(应该是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可以在不同的base (docs)中编码。

使用能够正确检测url和路径中CID的专用库:
https://www.npmjs.com/package/is-ipfs

相关内容

最新更新