URL内容高级校验:IPFS环境检测通配符匹配及字符数验证问题
问题修复方案
第一个判断失效问题修复
你原写法的问题在于,JavaScript的indexOf()方法仅支持精确字符串匹配,语法"ba"*".ipfs."中的*是算术乘法运算符,字符串做乘法运算会返回NaN,导致判断逻辑完全失效。
要实现类似Shell通配符的匹配效果,使用正则表达式的test()方法即可,修正后的代码如下:
// 匹配ba开头、任意字符结尾后接.ipfs.的场景 if(/ba.*\.ipfs\./.test(window.location.href)) { alert("Alert: IPFS!"); }
新增CID长度校验功能实现
如果要验证子域名模式下,https://之后、.ipfs.之前以ba开头的CID长度为59位,可以用正则分组捕获目标段后做长度判断,代码示例:
const ipfsSubdomainReg = /^https:\/\/(ba[a-z0-9]+)\.ipfs\./i; const matchResult = window.location.href.match(ipfsSubdomainReg); if (matchResult) { const cid = matchResult[1]; // 校验长度是否为59位 if (cid.length === 59) { console.log('CID长度校验通过,值为:', cid); alert("Alert: IPFS!"); } else { console.log('CID长度不合法,实际长度:', cid.length); } }
代码优化建议
你当前的三个判断逻辑重复度较高,可以合并为一个正则判断,简化代码:
// 同时匹配子域名模式和路径模式的IPFS场景 const ipfsReg = /(ba.*\.ipfs\.|\/ipfs\/(Qm|ba))/i; if(ipfsReg.test(window.location.href)) { alert("Alert: IPFS!"); }
内容的提问来源于stack exchange,提问作者dani 'SO learn value newbies'
相关产品推荐
相关产品推荐

