【问题标题】:Phone regex validation for Argentina阿根廷的电话正则表达式验证
【发布时间】:2014-08-20 12:19:19
【问题描述】:

我想出了我所在国家/地区电话的常规表达方式,但我缺少一些东西。

这里的规则是:(Area Code) Prefix - Sufix

  • 区号可以是 3 到 5 位数字
  • 前缀可以是 2 到 4 位数字。
  • 区号 + 前缀长度为 7 位。
  • 后缀始终为 4 位数字
  • 总位数为 11。

我想我可以将 3 个简单的正则表达式与 OR "|" 链接起来像这样:

/(\(?\d{3}\)?[- .]?\d{4}[- .]?\d\d\d\d)|(\(?\d{4}\)?[- .]?\d{3}[- .]?\d\d\d\d)|(\(?\d{5}\)?[- .]?\d{2}[- .]?\d\d\d\d)/

我做错的事情是 \d\d\d\d 不匹配仅 4 位数字的后缀,例如:(011) 4740-5000 这是一个有效的电话号码,可以,但如果添加额外的数字它也将作为有效的电话号码返回,即:(011) 4740-5000000000

【问题讨论】:

标签: regex phone-number


【解决方案1】:

您应该使用^$ 来匹配整个字符串

例如 ^\d{4}$ 将精确匹配 4 位数字,不多不少。

这是完整的正则表达式模式

^((\(?\d{3}\)? \d{4})|(\(?\d{4}\)? \d{3})|(\(?\d{5}\)? \d{2}))-\d{4}$

Online demo


根据您的正则表达式模式分隔符可以是 -,. 或单个空格然后尝试

^((\(?\d{3}\)?[-. ]?\d{4})|(\(?\d{4}\)?[-. ]?\d{3})|(\(?\d{5}\)?[-. ]?\d{2}))[-. ]?\d{4}$

【讨论】:

    【解决方案2】:

    这种模式对我来说很好用:

    /^\\(?(\d{3,5})?\\)?\s?(15)?[\s|-]?(4)\d{2,3}[\s|-]?\d{4}$/
    

    【讨论】:

    • 感谢您的努力。原始海报已经很长时间没有在 SO 上在线了,因此我在没有侦探的情况下对您的答案进行了投票。欢迎使用 StackOverflow。
    【解决方案3】:

    我已经在 regex101 中对此进行了测试:

    /^((?:\(?\d{3}\)?[- .]?\d{4}|\(?\d{4}\)?[- .]?\d{3}|\(?\d{5}\)?[- .]?\d{2})[- .]?\d{4})$/
    

    RegEx Demo

    • ^ 匹配字符串的开头
      • ( 捕获组的开始
        • (?:非捕获组的开始
          • 区号和前缀的不同选项
        • )结束非捕获组
        • [- .]?\d{4}电话号码后四位
      • )结束捕获组
    • $ 匹配字符串的结尾

    【讨论】:

      【解决方案4】:

      如果您尝试验证这样的电话号码,那么以下一个应该适合您的需要:

      ^(?=.{15}$)[(]\d{3,5}[)] \d{2,4}-\d{4}$
      

      Debuggex Demo

      【讨论】:

        【解决方案5】:

        您需要通过锚点指示开始和结束来匹配 complete 表达式。您也不需要为不同的长度进行交替。

        /^(?=(\D*\d){11}$)\(?\d{3,5}\)?[- .]?\d{2,4}[- .]?\d{4}$/
        

        这是细分:

        (?=(\D*\d){11}$)    is a non-capturing group ensuring that there are 11 digits total,
                             with any number of non-digits amongst them
        \(?\d{3,5}\)?[- .]? matches 3-5 digits in parens (area code), followed by a separator
        \d{2,4}[- .]?       matches 2-4 digits (prefix), followed by a separator
        \d{4}               matches the suffix
        

        【讨论】:

        • 这很聪明,但我认为您会遇到(Area Code) 中可选括号的问题(用于您的前瞻)。毕竟你可能不得不使用一些|
        • 糟糕——我没有注意到括号是可选的。嗯。
        • @ohaal:好的,我已经编辑了答案以适应是否存在括号。
        猜你喜欢
        • 2012-01-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多