群体条件的正则表达式

时间:2016-11-23 22:41:05

标签: javascript jquery regex

我正在使用以下模式

^(?:0067|0)[0-9\\s.\\/-]{6,20}$

我想验证从零开始的数字或者在几个数字之后的双零数字。实施例

01796568801 - 应该有效, 0089737732 - 应无效, 0067214356 - 应该有效

但我的模式是有效的。请告知我如何才能只使用单个0或0067?

https://jsfiddle.net/Lz63rgs2/

3 个答案:

答案 0 :(得分:1)

您的模式正在全部生效,因为您正在指定它。 {@ 1}}部分允许6到20个字符长的任何数字。

例如,您可以将正则表达式更改为:

[0-9\\s.\\/-]{6,20}

<强> Working demo

答案 1 :(得分:0)

要弄清楚,哪里出错了,最好明白你的要求:

 /^(?:0067|0)[0-9\\s.\\/-]{6,20}$/

表示:

00670,然后是0-9blank/- 6-20次

所以,你的所有例子都“符合”这个条件:

   01796568801   => 0 1796568801
   0089737732301 => 0 089737732301
   0067214356    => 0067 214356
or 0067214356    => 0 067214356

https://regex101.com/r/EpZumK/1

为了给您一个通用解决方案,需要更多输入,因为您的选项00670只不过是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个或更多空白字符。