這是我下面的正則表達式:現場輸入驗證
/^08(17|18|19|31|32|33|38|59|77|78)[0-9]{0,8}$/
,如果我把08在輸入欄中將顯示通知的錯誤,我要的是,如果我輸入0817將顯示成功,如果我輸入08我想不會出現通知錯誤。也許解決方案是使用不要在正則表達式中捕獲組。但如何做到這一點?
這是我的前綴驗證我想要什麼:
0817, 0818, 0819, 0831, 0832, 0833, 0838, 0859, 0877, 0878
這是我下面的正則表達式:現場輸入驗證
/^08(17|18|19|31|32|33|38|59|77|78)[0-9]{0,8}$/
,如果我把08在輸入欄中將顯示通知的錯誤,我要的是,如果我輸入0817將顯示成功,如果我輸入08我想不會出現通知錯誤。也許解決方案是使用不要在正則表達式中捕獲組。但如何做到這一點?
這是我的前綴驗證我想要什麼:
0817, 0818, 0819, 0831, 0832, 0833, 0838, 0859, 0877, 0878
你想實現一個現場輸入驗證您的代碼的包括4位的前綴集,然後0-8任意數字。
的一點是,你不能讓子模式可選順序,你需要使用嵌套可選組要求左手位是右手的人之前存在。
模式變得相當凌亂,但這是使它工作的唯一辦法:
^0(?:8(?:1(?:[789][0-9]{0,8})?|3(?:[1238][0-9]{0,8})?|5(?:9[0-9]{0,8})?|7(?:[78][0-9]{0,8})?)?)?$
詳細:
^
- 字符串的開始0
- 強制性0
(?:
8
- 強制性8
(?:
1
- 強制性1
隨後...(?:
- 任選的組匹配要麼...
[789]
- 7
,或者8
,或9
隨後用[0-9]{0,8}
- 0-8 任何數字)?
- (任選的組的端1
後)|
- 或3(?:[1238][0-9]{0,8})?
- (與上述相似)|
- 或5(?:9[0-9]{0,8})?
- (類似於上文)|
- 或7(?:[78][0-9]{0,8})?
- (類似於上文))?
- 所述可選組的端部相匹配的8
之後全部)?
- 第一個0
之後的整個部分是可選。$
- 字符串結尾。好工作夥計thx你的工作 –
它看起來像我有一個額外的冗餘組,刪除並添加解釋。 –
非常好,謝謝兄弟 –
你並不需要一個非捕獲組。您只需要?
作爲可選事件。它將被視爲0或1次有效。
/^08(17|18|19|31|32|33|38|59|77|78)?[0-9]{0,8}$/
當我把08仍然發佈通知錯誤 –
我已經用驗證證明更新了答案。也許你應該複製錯誤在這裏爲我們看到 –
你能告訴我們你想要匹配的全部範圍嗎?您當前的正則表達式也不會匹配'0817'。 –
我認爲'08'應該是變化的一部分:'/ ^(08 | 17 | 18 | 19 | 31 | 32 | 33 | 38 | 59 | 77 | 78)[0-9] {0,8} $ /'?最好是用'/ ^(08 | 1 [7-9] | 3 [1238] | 59 | 7 [78])[0-9] {0,8} $ /'。 –
你應該更新這個問題的相關進展和細節,而不是發佈[重複問題](http://stackoverflow.com/questions/38740717/prefix-validation-with-regular-expression)。現在,我明白了,你需要允許'08',然後僅從組2位數據塊。嘗試['^ 08 [0-9] {0,8})$'(:(?: 17 | 18 | 19 | 31 | 32 | 33 | 38 | 59 | | 77 78?)?(HTTPS:/ /regex101.com/r/xC7mT4/3)。或者更高效的['^ 08(?:(?: 1 [789] | 3 [1-38] | 59 | 7 [78])[0-9] {0,8})?$'](https ://regex101.com/r/xC7mT4/4)。如果有任何的工作原理,你所期望的方式,請發表評論,這樣我可以張貼與解釋的答案。 –