javascript - 正则表达式匹配有效的电话号码

标签 javascript regex

我对正则表达式很陌生,不确定我到底做错了什么。

我正在寻找与以下数字格式匹配的正则表达式:

匹配要求:

  1. 必须以 0 或 3 开头
  2. 必须介于 7 到 11 位数字之间
  3. 不得允许升序数字。例如0123456789, 01234567
  4. 不得允许重复数字。例如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}$

Regex demo

或者省略第一个前瞻并将其移至匹配项,将量词更改为 \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}$

Regex demo

编辑

根据评论,该字符串没有 4 个升序数字:

^(?!.*(\d)\1{3})[03](?!\d*(?:0123|1234|2345|3456|4567|5678|6789))\d{6,10}$

Regex demo

关于javascript - 正则表达式匹配有效的电话号码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60394293/

相关文章:

java - 复杂的键值对

javascript - JQuery:如何触发隐藏元素上的点击事件?

java - 如何使用 JavaScript 更新我的 JSP 页面的某些组件

javascript - Angular 2+ ngModel 仅使用对象括号表示法在嵌套值上绑定(bind)动态 ngModel 的一种方式

c# - 匹配正则表达式中的可选斜杠

javascript - 如何在不同长度的文本周围创建//的注释 block

javascript - 动态插入脚本并立即执行

javascript - highcharts 附加到 highcharts 容器 div

java - 从字符串中删除标点符号

regex - 在 awk 中使用非精确匹配合并两个文件