我使用下面的图案正则表达式组条件
^(?:0067|0)[0-9\\s.\\/-]{6,20}$
我想验证从零开始或以下几个数字双零的数字。例如
01796568801 - 应该是有效的, 0089737732 - 应为无效, 0067214356 - 应该是有效的
但我的模式是使所有有效。请告诉我如何才能让它只取单个0或0067?
https://jsfiddle.net/Lz63rgs2/
我使用下面的图案正则表达式组条件
^(?:0067|0)[0-9\\s.\\/-]{6,20}$
我想验证从零开始或以下几个数字双零的数字。例如
01796568801 - 应该是有效的, 0089737732 - 应为无效, 0067214356 - 应该是有效的
但我的模式是使所有有效。请告诉我如何才能让它只取单个0或0067?
https://jsfiddle.net/Lz63rgs2/
你的模式是使所有有效的,因为你指定。部分[0-9\\s.\\/-]{6,20}
允许任何数字从6到20个字符长。
例如,你可以在你的正则表达式改成这样:
^(?:0067|0)[1-9][0-9\s.\/-]{5,19}$
搞清楚,怎么回事错了,这是最好的了解您所要求的内容:
/^(?:0067|0)[0-9\\s.\\/-]{6,20}$/
举报:
0067
或0
,其次是0-9
或blank
或/
或-
6-20倍
因此,所有你的例子 “匹配” 这个条件:
01796568801 => 0 1796568801
0089737732301 => 0 089737732301
0067214356 => 0067 214356
or 0067214356 => 0 067214356
https://regex101.com/r/EpZumK/1
为了给你一个一般的解决方案,需要更多的输入,因为这里您的选项0067
和0
不过是start with 0
,导致任何情况下,wh如果0067不是100%匹配,那么start with 0
条件也会匹配,如果字符串长度未超出。
编辑:费德里科户外广场解决方案中列出的情况下工作,但这样的“案例dependenant”的解决方案似乎对我不好,因为软件始终以“成长” - 在3个月,0049可能是有效的为好,需要代码维护...
为什么你不使用两个输入元素:一个用于国家代码(或0,如果是本地的)和一个用于数字?
所以,我不知道,如果JavaScript的支持负先行,但如果这样做,你可以试试下面的模式:
^(0067|0(?!0))(\d){6,19}\s+-$
比赛:01796568801 - | 0067214356 -
不符合:0089737732 - 0008973773 -
我不确定在破折号前的剩余数字后面的空格,所以我做了1个或多个空格字符。