正则表达式:URL顶级域名白名单配置及重复TLD匹配排查
解决URL特定TLD白名单过滤的正则问题
首先分析你当前正则的核心问题:原表达式^https:\/\/[^\/]+\.my-site\.com|cloud\/?.*?$使用了|分隔两个独立匹配规则,导致只要URL中包含cloud/就会被误判,完全忽略了前缀的域名约束。你尝试添加的{1}是冗余操作,因为分组本身只会匹配一次,无法解决结构错误带来的问题。
修正后的正则表达式
^https:\/\/[^\/]+\.my-site\.(com|cloud)(?:\/|$|\?|#).*$
正则各部分解析
^https:\/\/:严格匹配URL开头的HTTPS协议[^\/]+:匹配.my-site之前的域名前缀,确保不会包含路径分隔符/,限定在域名范围内\.my-site\.(com|cloud):精准匹配.my-site.后接白名单内的TLD(com或cloud)(?:\/|$|\?|#):非捕获分组,限定TLD之后必须是路径起始符/、URL结尾、查询参数?或锚点#,彻底避免后续出现重复TLD的情况.*$:匹配TLD之后的任意合法URL内容(路径、参数等)
测试验证
在JavaScript中使用test方法验证:
const validRegex = /^https:\/\/[^\/]+\.my-site\.(com|cloud)(?:\/|$|\?|#).*$/; // 误匹配示例:返回false(符合预期) console.log(validRegex.test('https://qa.my-site.cloud.cloud/check-this-out?check-it-out=true')); // 合法URL:返回true console.log(validRegex.test('https://qa.my-site.com/check-this-out')); console.log(validRegex.test('https://prod.my-site.cloud?param=1')); console.log(validRegex.test('https://dev.my-site.com'));
内容的提问来源于stack exchange,提问作者S. C.
相关产品推荐
相关产品推荐

