JavaScript如何检测各类链接?现有匹配函数适配问题求修复
修复URL验证函数以支持相对协议链接和分号分隔多URL
原函数无法识别//cdn.shopify.com/...这类相对协议链接,也不支持分号分隔的多URL字符串,以下是修复后的实现:
function isValidUrl(urlString) { const pattern = new RegExp( '^((' + '([a-zA-Z]+:\/\/)|\/\/' + // 支持标准协议或相对协议(//开头) ')' + '((([a-z\d]([a-z\d-]*[a-z\d])*)\.)+[a-z]{2,}|' + // 域名 '((\d{1,3}\.){3}\d{1,3}))' + // IPv4地址 '(\:\d+)?(\/[-a-z\d%_.~+]*)*' + // 端口和路径 '(\?[;&a-z\d%_.~+=-]*)?' + // 查询字符串 '(\#[-a-z\d_]*)?' + // 锚点 ')(;\s?\1)*$', // 支持分号分隔的多个URL(可选空格) 'i' ); return pattern.test(urlString); }
关键修改点说明:
- 支持相对协议链接:将原协议部分的
([a-zA-Z]+:\/\/)?调整为(([a-zA-Z]+:\/\/)|\/\/)?,允许URL以//开头,适配相对协议的场景。 - 支持分号分隔多URL:将整个单URL匹配逻辑包裹为分组
\1,新增(;\s?\1)*规则,允许后续出现分号(可跟随空格)加重复的URL模式,实现多URL的验证。
测试验证示例:
- 相对协议链接:
//cdn.shopify.com/assets/example.js→ 返回true - 分号分隔多URL:
http://www.google.com; //cdn.shopify.com/path→ 返回true - 原有支持的URL:
www.yahoo.com、http://www.google.com→ 仍正常返回true
内容的提问来源于stack exchange,提问作者Shibbir
相关产品推荐
相关产品推荐

