【问题标题】:Regex : validate length, must contain digits, must contain 3 hyphens正则表达式:验证长度,必须包含数字,必须包含 3 个连字符
【发布时间】:2011-11-30 00:52:37
【问题描述】:

我正在寻找用于验证电话号码的正则表达式。

这是我希望我的正则表达式验证的内容:

  • 长度必须为 14 到 17 个字符
  • 必须全部为数字并包含 3 个连字符

接受的格式:

5-555-555-5555
55-55-555-5555
55-555-555-5555
555-555-555-5555
5555-555-555-5555

我当前的代码如下所示:

^.*(?=.{14,17})(?=.*\-{3,})(?=.*[\d\-]).*$

允许超过 3 个连字符,长度允许超过 17 个字符。

提前感谢您的帮助!

【问题讨论】:

    标签: regex phone-number


    【解决方案1】:

    这是一个丑陋的蛮力版本,它简单地明确列出了 4 种有效格式:

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

    这是Rubular 链接。

    【讨论】:

    • 这实现了我的原始要求,然后也进一步执行了我的强制格式。我对这个应用程序中的蛮力没有任何问题。非常感谢!
    • @mduschak:对于正则表达式,我有时更喜欢蛮力而不是出于维护目的的聪明。
    【解决方案2】:

    这个怎么样:

    /^(?=.{14,17}$)(\d+-){3}\d+$/
    

    【讨论】:

      【解决方案3】:

      你可以试试这个

      /(?=^.{14,17}$)^\d+-\d+-\d+-\d+$/.test('2332-32332-233-22')
      

      (?=.{14,17}) 首先使用前瞻断言字符串的长度在 14 到 17 个字符之间。然后它匹配看到数字之间有三个连字符。 ^ and $ 确保没有其他内容。

      【讨论】:

        【解决方案4】:

        我知道这已经过时了,但我接受了挑战,并对 Amber 的答案进行了编辑的非暴力破解版本。

        /^(?=.{14,17}$)\d{1,4}(?:\-\d{3}){3}\d$/
        

        这具有强制格式 (x{1,4}-xxx-xxx-xxxx) 的能力,并且比 Mark Wilkins 的答案短。

        Amber 的答案不完整,因为它不强制执行格式(5-555-555-5555555 在明确指出不是有效格式时得到验证),但它确实使用 -1 char 强制长度而不是 Narendra Yadala 的答案.

        编辑(14/01/2014):

        这是一个简化的答案:

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

        我所做的很简单:我取消了前瞻。

        在这种情况下没有用。

        这个比 Narendra Yadala 的答案长 -13 个字符,比我以前的 -12 个字符。

        【讨论】:

          猜你喜欢
          • 2019-10-07
          • 1970-01-01
          • 2015-05-12
          • 2019-09-15
          • 2018-09-17
          • 2011-05-02
          • 2017-02-06
          • 1970-01-01
          • 2011-05-05
          相关资源
          最近更新 更多