正则匹配前置精确文本或空值的域名白名单校验需求
适配精确
test-或空值的域名正则解决方案 没问题,我来帮你调整正则表达式,完美适配你需要匹配xxx.test-testDomain.com这类域名,同时保留原有的子域名和多后缀匹配能力。
核心修改思路
你原来的正则有两个关键问题需要修正,同时要加入精确匹配test-或空值的逻辑:
- 未转义的点:正则里的
.默认匹配任意字符,必须转义成\.才能精确匹配域名中的分隔点; - 加入可选的
test-前缀:用(test-)?来实现“精确匹配test-或者完全不出现”的需求,?表示前面的内容出现0次或1次,刚好对应空值或目标文本两种情况。
最终正则表达式
^([a-z0-9]*\.)*((test-)?testDomain)\.(com|cn|local)$
正则细节说明
^和$:锚定字符串的开头和结尾,避免部分匹配(比如不会误匹配abc.xxx.testDomain.com.xyz这类带多余后缀的域名);([a-z0-9]*\.)*:匹配任意层级的子域名(0级、1级、多级都支持,比如空、www.、xxx.yyy.);(test-)?testDomain:核心匹配部分,精准匹配testDomain或者test-testDomain两种主域形式;\.(com|cn|local):精确匹配指定的后缀,转义后的点确保只匹配域名中的分隔点。
匹配示例(符合要求的域名)
www.testDomain.comxxx.test-testDomain.comyyy.xxx.testDomain.cntest-testDomain.local
不匹配示例(不符合要求的域名)
xxx.tes-testDomain.com(不是精确的test-前缀)www.testDomain.org(后缀不在允许列表内)xxx.testDomaincom(缺少域名分隔点)
保留原分组结构的版本
如果你需要保留原来正则的分组逻辑(比如单独捕获子域部分),可以用这个版本:
^([a-z0-9]*\.)?([a-z0-9]*\.)?(test-)?testDomain\.(com|cn|local)$
内容的提问来源于stack exchange,提问作者M1M6
相关产品推荐
相关产品推荐

