2016-11-23 53 views
0

我使用下面的图案正则表达式组条件

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

我想验证从零开始或以下几个数字双零的数字。例如

01796568801 - 应该是有效的, 0089737732 - 应为无效, 0067214356 - 应该是有效的

但我的模式是使所有有效。请告诉我如何才能让它只取单个0或0067?

https://jsfiddle.net/Lz63rgs2/

回答

1

你的模式是使所有有效的,因为你指定。部分[0-9\\s.\\/-]{6,20}允许任何数字从6到20个字符长。

例如,你可以在你的正则表达式改成这样:

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

Working demo

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,导致任何情况下,wh如果0067不是100%匹配,那么start with 0条件也会匹配,如果字符串长度未超出。

编辑:费德里科户外广场解决方案中列出的情况下工作,但这样的“案例dependenant”的解决方案似乎对我不好,因为软件始终以“成长” - 在3个月,0049可能是有效的为好,需要代码维护...

为什么你不使用两个输入元素:一个用于国家代码(或0,如果是本地的)和一个用于数字?

0

所以,我不知道,如果JavaScript的支持负先行,但如果这样做,你可以试试下面的模式:

^(0067|0(?!0))(\d){6,19}\s+-$ 

比赛:01796568801 - | 0067214356 -

不符合:0089737732 - 0008973773 -

我不确定在破折号前的剩余数字后面的空格,所以我做了1个或多个空格字符。