我正在使用以下模式
^(?:0067|0)[0-9\\s.\\/-]{6,20}$
我想验证从零开始的数字或者在几个数字之后的双零数字。实施例
01796568801 - 应该有效, 0089737732 - 应无效, 0067214356 - 应该有效
但我的模式是有效的。请告知我如何才能只使用单个0或0067?
答案 0 :(得分:1)
您的模式正在全部生效,因为您正在指定它。 {@ 1}}部分允许6到20个字符长的任何数字。
例如,您可以将正则表达式更改为:
[0-9\\s.\\/-]{6,20}
<强> Working demo 强>
答案 1 :(得分:0)
要弄清楚,哪里出错了,最好明白你的要求:
/^(?: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
,因为任何情况下,0067不是100%如果匹配,start with 0
条件也将匹配,如果未超过字符串长度。
编辑:Federico Piazzas解决方案将适用于所概述的案例,但这种“案例依赖”解决方案对我来说似乎很糟糕,因为软件总是“增长” - 并且在3个月内,0049也可能有效,需要代码-maintenance ...
为什么不使用两个输入元素:一个用于国家/地区代码(如果是本地代码则为0),另一个用于数字?
答案 2 :(得分:0)
所以,我不确定javascript是否支持负面预测,但如果确实如此,你可以尝试以下模式:
^(0067|0(?!0))(\d){6,19}\s+-$
比赛:01796568801 - | 0067214356 -
不匹配:0089737732 - | 0008973773 -
我不确定短划线前剩余数字之后的空格,所以我需要1个或更多空白字符。