[英]Regex match valid Phone Number
我對正則表達式很陌生,不確定我做錯了什么。
我正在尋找匹配以下數字格式的正則表達式:
匹配要求:
這就是我想出的:
^(?=(^[0,3]{1}))(?!.*(\d)\1{3,})(?!^(?:0(?=1|$))?(?:1(?=2|$))?(?:2(?=3|$))?(?:3(?=4|$))?(?:4(?=5|$))?(?:5(?=6|$))?(?:6(?=7|$))?(?:7(?=8|$))?(?:8(?=9|$))?9?$).{7,11}$
上述正則表達式不符合第 (4) 條條件。 不知道為什么。
任何幫助,將不勝感激。
謝謝
JS 風格的 PCRE 的解決方案是
/^[03](?!123456(7(8(9|$)|$)|$))(?!(?<d>.)\\k<d>+$)[0-9]{6,10}$/
說明
^[03]
從字符串的開頭開始,然后讀取 0 或 3(?!123456(7(8(9|$)|$)|$))
確保在第一個字符之后沒有序列(如果可以讀取序列,則負向前瞻失敗(?!(?<d>.)\\k<d>+$)
是另一個負面的前瞻:它確保第一個字符讀取(標記為d )不會一次又一次地重復,直到字符串結束[0-9]{6,10}$/
最終讀取6到10位數字(第一個已經讀取)幾個測試:
關於您嘗試的模式的一些說明
{1}
和[0,3]
的逗號(?!.*(\\d)\\1{3,})
, (\\d)
是第二個捕獲組,因為(?=(^[0,3]{1}))
包含第一個捕獲組所以它應該是\\2
而不是\\1
{3,}
的逗號.{7,11}
,其中點將匹配除換行符之外的任何字符。 您可以使用\\d
代替僅匹配數字你的模式可能看起來像
^(?=(^[03]))(?!.*(\d)\2{3})(?!^(?:0(?=1|$))?(?:1(?=2|$))?(?:2(?=3|$))?(?:3(?=4|$))?(?:4(?=5|$))?(?:5(?=6|$))?(?:6(?=7|$))?(?:7(?=8|$))?(?:8(?=9|$))?9?$)\d{7,11}$
或者省略第一個前瞻並將其移動到匹配項,將量詞更改為\\d{6,10}
並重復捕獲組\\1
而不是\\2
^(?!.*(\d)\1{3})(?!(?:0(?=1|$))?(?:1(?=2|$))?(?:2(?=3|$))?(?:3(?=4|$))?(?:4(?=5|$))?(?:5(?=6|$))?(?:6(?=7|$))?(?:7(?=8|$))?(?:8(?=9|$))?9?$)[03]\d{6,10}$
編輯
根據評論,該字符串沒有 4 個升序數字:
^(?!.*(\d)\1{3})[03](?!\d*(?:0123|1234|2345|3456|4567|5678|6789))\d{6,10}$
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.