【问题标题】:Prevent a formatted phone number from having 10 repeated numbers RegEx防止格式化的电话号码有 10 个重复的数字 RegEx
【发布时间】:2019-06-09 04:57:28
【问题描述】:

我有一个电话号码正则表达式,格式必须为 nnn-nnn-nnnn 或 n-nnn-nnn-nnnn(n 表示号码)。

这个正则表达式是

^(1-)?\d{3}-\d{3}-\d{4}$

我需要防止电话号码全为 1、全为 2、全为 3 等。

如果有 10 个相同的字符,我有一个模式会通过,但我想要反过来,不能有 10 个相同的字符,我需要将它粘贴到负前瞻中,这样我就可以解耦以上模式来自电话号码模式,并说“将此应用于模式 x,无论 x 可能是什么模式,它都不能包含 10 个或更多字符”。

 /(.)\1{10,}/  

尝试的解决方案:

1.) 我将下面的模式嵌套在括号中,所以它都在第一个捕获组中

^(1-)?\d{3}-\d{3}-\d{4}$ 

2.) 将下面的模式插入到负前瞻中,括号从第一个模式中删除,因为我希望第一个捕获组位于负前瞻之外

.\1{10,} 

我最终得到了什么:

(?!.\1{10,})(^(1-)?\d{3}-\d{3}-\d{4}$)

预期结果:111-111-1111 失败 实际:111-111-1111 通行证

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    在负前瞻内,捕获一个数字,然后重复匹配-*\1。如果匹配 9 次(或更多),那么您有 10 个重复的数字:

    ^(?!(\d)(?:-*\1){9})((1-)?\d{3}-\d{3}-\d{4}$)
    

    https://regex101.com/r/BcfMvW/1

    【讨论】:

    • 好的,所以我改变了它,如果一个数字不同,``` (?!(\d)(?:-*\1){9})(1-)?\d {3}-\d{3}-\d{4}````,所以 is 匹配,这就是我想要的。假设我以 (nnn) nnn-nnnn 格式执行此操作..我如何更改它以便不仅忽略破折号而且忽略空格和括号?看起来您试图通过在非捕获组中放置破折号来实现破折号?放置一个空格和一个括号与破折号的效果不同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 2013-06-25
    • 1970-01-01
    相关资源
    最近更新 更多