使用Regex验证域名时负向逆序环视未生效问题求解
问题原因
你当前的正则存在两个缺陷:
- 没有加结束锚点
$,导致可以部分匹配字符串前半段,后面的非法内容会被忽略 - 顶级域分段没有添加「不能以-开头、不能以-结尾」的校验规则
修复后的正则
^((?!-)(\*\.)?[A-Za-z0-9-]{1,63}(?<!-)\.)+(?!-)[A-Za-z0-9-]{1,63}(?<!-)$
校验逻辑说明
- 每个域名分段(包括顶级域)都强制满足:开头不能是
-,结尾不能是-,长度1-63位,仅允许大小写字母、数字、半角横杠 - 支持泛解析域名格式(如
*.example.com) - 末尾的
$强制匹配整个字符串结尾,避免部分匹配绕过校验
测试验证:
test-.google.com不匹配,符合预期test.google-.com不匹配,符合预期test.google.com正常匹配*.test.com正常匹配
内容的提问来源于stack exchange,提问作者Vinayak49
相关产品推荐
相关产品推荐

