我使用下面的圖案正則表達式組條件
^(?: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個或多個空格字符。