如何编写匹配2-30字符且含单个必填连字符的域名正则表达式?
修正后的域名正则表达式实现
最终正则表达式
/^(?=.{2,30}$)[a-z0-9]+-[a-z0-9]+$/i
规则拆解
^和$:锚定字符串首尾,确保整个内容完全匹配规则,无额外字符。(?=.{2,30}$):正向预检查,限制整个字符串长度在2-30字符范围内(注:因必填单个连字符,实际最短有效长度为3,2字符无法满足「含单个连字符+两边字母数字」的要求)。[a-z0-9]+:匹配1个及以上字母/数字,避免连字符出现在字符串首尾。-:仅匹配单个连字符,确保整个字符串中只有这一处分隔符。/i:不区分大小写,若仅需匹配小写字母可移除该修饰符。
原正则的问题
你的原正则 /^[a-z0-9-]{2,30}$/ 有三个核心缺陷:
- 允许连续多个连字符(如
test--domain); - 允许连字符出现在开头或结尾(如
-test或test-); - 不强制要求包含连字符(纯字母数字的字符串也会被匹配)。
测试验证
- 匹配成功:
thisi67satest-mydomain - 匹配失败:
test--domain(多连字符)、-testdomain(连字符开头)、testdomain-(连字符结尾)、testdomain(无连字符)、abcdefghijklmnopqrstuvwxyzabcdef(长度超30)
内容的提问来源于stack exchange,提问作者lacoder
相关产品推荐
相关产品推荐

