我对正则表达式很陌生,不确定我到底做错了什么。
我正在寻找与以下数字格式匹配的正则表达式:
匹配要求:
- 必须以 0 或 3 开头
- 必须介于 7 到 11 位数字之间
- 不得允许升序数字。例如0123456789, 01234567
- 不得允许重复数字。例如011111111、3333333333、0000000000
这是我想到的:
^(?=(^[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) 条条件。但不知道为什么。
如有任何帮助,我们将不胜感激。
谢谢
最佳答案
关于您尝试的模式的一些注释
- 您可以省略
{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}$
关于javascript - 正则表达式匹配有效的电话号码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60394293/