2016-11-23 38 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個或多個空格字符。