[英]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.