使用JavaScript正则实现自定义URL验证时匹配异常如何修复?
URL校验正则修复方案
存在的问题
- 原有正则强制要求域名必须携带
www.前缀,你的第一个测试用例http://demo.com无此前缀,因此匹配失败 - 使用字符串构造
RegExp对象时,正则转义符\需要二次转义,原代码中\.、\d、\/等转义符在字符串中会被解析为普通字符,丢失正则转义效果 - 域名分组逻辑存在无效空匹配分支,会导致校验规则失效
修复后可满足预期的代码
const test = (str) => { const t = new RegExp( '^(https?:\\/\\/)?' + '(?:(www\\.)[a-z\\d](?:[a-z\\d-]*[a-z\\d])*\\.[a-z]{2,}|[a-z\\d](?:[a-z\\d-]*[a-z\\d])*\\.[a-z]{2,})' + '(\\#[-a-z\\d_]*)?$', 'i', ); return t.test(str); }; console.log(test('http://demo.com')); // 输出 true,符合预期 console.log(test('http://ww.demo.com')); // 输出 false,符合预期
内容的提问来源于stack exchange,提问作者Asking
相关产品推荐
相关产品推荐

