【问题标题】:Regular expression to match US phone numbers匹配美国电话号码的正则表达式
【发布时间】:2009-10-13 11:56:03
【问题描述】:

正则表达式^((\(\d{3}\) ?)|(\d{3}-))?\d{3}-\d{4}$ 匹配XXX-XXX-XXXXXXX-XXXX 形式的字符串(我错过了什么吗?)。

但是,它也不匹配 (XXX) XXX-XXXX(XXX) XXX-XXX-XXXX(我需要它匹配)。

你能帮我修复它,使它与格式匹配
XXX-XXX-XXXX, XXX-XXXX, (XXX) XXX-XXXX, (XXX) XXX-XXXX
而不导致它匹配我不想要的其他字符串格式?

【问题讨论】:

    标签: regex


    【解决方案1】:

    您的规范有点混乱。您的最后两个案例看起来相同:
    XXX-XXX-XXXX
    XXX-XXX
    (XXX) XXX-XXXX
    (XXX) XXX-XXXX

    (看起来您正在尝试匹配电话号码,对吗?) 假设您的最后一个案例是“(XXX)XXX-XXXX”(区号和常规号码之间没有空格,我认为这是“?”表示可选空格)那么您的RegExp几乎是正确的,只需在前面添加两个反斜杠区号括号,因此它们被匹配为纯字符而不是特殊的分组字符:

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

    请注意,您的正则表达式可能没有正确通过,我注意到堆栈溢出从 RE 模式中删除了一个反斜杠,我必须输入一个双反斜杠“\\”才能得到一个反斜杠在留言中

    【讨论】:

      【解决方案2】:

      试试这个:

      (\(\d{3}\) )?(\d{3}-){1,2}(\d{4})
      

      【讨论】:

        【解决方案3】:

        您需要对括号进行转义,如下所示:\( 否则,它们不会匹配,而是进行捕获。

        【讨论】:

          【解决方案4】:

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

          这会起作用。

          【讨论】:

            【解决方案5】:

            我想这就是你要找的,

            /^(((((([0-9]{3})-)|((([0-9]{3}))\s))([0-9]{3})- ([0-9]{4}))|(([0-9]{3})-([0-9]{4})))$/

            它适用于以下模式 XXX-XXX-XXXX, XXX-XXXX, (XXX) XXX-XXXX

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2012-11-10
              • 1970-01-01
              • 2020-05-02
              • 2018-01-23
              • 2015-11-22
              • 1970-01-01
              • 1970-01-01
              • 2010-12-16
              相关资源
              最近更新 更多