You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

正则表达式需求:匹配特定域名格式,修复现有正则失效场景

域名匹配正则表达式修正方案

需求说明

需要匹配以下三类域名格式:

  • 任意*.扩展名(扩展名需包含2个及以上a-z字符)
  • 任意domain.扩展名或多级子域名格式(如sub.domain.扩展名)
  • 以上两类中以*.开头的字符串(即*.扩展名和*.多级域名.扩展名)

现有正则问题

  • 原正则 /^(?:\*\.)?([a-z0-9-]{1,255}\.)+[a-z]{2,}$/i 无法匹配*.test:该正则要求*.后必须至少有一个带.的域名段,而*.test中*.后直接是扩展名,不符合结构要求。
  • 修改后的正则 /^((?:\*\.)?([a-z0-9-]{1,255}\.)+[a-z]{2,})|\*.[a-z]{2,}$/i 会误匹配*.*.test:分支匹配优先级导致只要字符串包含*.扩展名片段就会被判定匹配,忽略了中间非法的*字符。

修正后的正则表达式

/^(?=.*\.)(?:\*\.)?(?:[a-z0-9-]{1,255}\.)*[a-z]{2,}$/i

正则逻辑说明

  • (?=.*\.):正向预查,确保字符串至少包含一个.,排除纯字符串(如test)和以.开头的非法格式(如.test)。
  • (?:\*\.)?:可选的*.前缀,支持以*.开头的格式。
  • (?:[a-z0-9-]{1,255}\.)*:0个或多个合法域名段(由字母、数字、连字符组成,长度1-255)加.,既适配*.test无额外域名段的场景,也支持*.test.test或test.test的多级域名结构。
  • [a-z]{2,}:匹配至少2个字符的扩展名,满足需求对扩展名的长度要求。
  • /i:忽略大小写,支持匹配大小写混合的域名。

测试用例验证

测试字符串匹配结果
testfalse
.testfalse
*.testtrue
test.testtrue
*.test.testtrue
*.*.testfalse

内容的提问来源于stack exchange,提问作者user756659

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 08:20:27