你能用正则表达式限制多个字符串/组吗? [已关闭]

问题描述 投票:0回答:1

我希望正则表达式检查域 +

.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,这超出了域名限制。

我找不到有人说你可以或不能这样做。 这对于正则表达式来说是可能的吗?如果是的话怎么办?

regex regex-group
1个回答
0
投票

您的要求不正确; 域名规范要求由

.
分隔的每个字符序列的长度最多为 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})$/
© www.soinside.com 2019 - 2024. All rights reserved.