我希望正则表达式检查域 +
.com
是否为 63 个字符。
我以为会这么简单,但这行不通
([\w]{1,10}\.[\w]{1,10}){1,5}
有效
aaa.aa
a.aaaa
a.a`
无效
aaa.aaa
a.aaaaa
.aaaaaa
这就是我现在的处境,但是
^([a-zA-Z0-9]{1,64})([.?&!+_\-][a-zA-Z0-9]{1,64})*@([a-zA-Z0-9-]{1,63})(\.[a-zA-Z]{2,20})+$
它没有我想要的指定限制。 现在,这两个组/字符串的数量限制为 1 到 63 和 1 到 20,因此将它们相加 = 83,这超出了域名限制。
我找不到有人说你可以或不能这样做。 这对于正则表达式来说是可能的吗?如果是的话怎么办?
您的要求不正确; 域名规范要求由
.
分隔的每个字符序列的长度最多为 63 个字符; 总体长度不限于 63 个字符。
对于后代,实现您(不正确)要求的解决方案可以使用负向后查找,附加到您的正则表达式中,以确保后续字符串的总长度最多为 63 个字符。
要将域名与 TLD 匹配,您可以使用与域名匹配的模式,后跟一个或多个
.xxx
扩展名:
/^[a-z0-9-]+(\.[a-z]{2,})+$/
这与
foo.co.uk
、blah.museum
等内容匹配。
您不能对第一个
.
的左侧设置长度限制,因为您不知道 .
的右侧将消耗多少 63 个字符的“预算”。因此,您可以添加一个后视断言,断言 64 个(或更多)字符没有匹配项:
(?<!.{64})
加在一起看起来像这样:
/^[a-z0-9-]+(\.[a-z]{2,})+(?<!.{64})$/