电话号码的正则表达式

时间:2011-02-01 21:47:24

标签: regex

我正在尝试:

\d{3}|\d{11}|\d{11}-\d{1}

匹配三位数字,十一位数字,十一位数后跟一个连字符,后跟一位数字。 但是,它只匹配三位数字!

我也试过了\d{3}|\d{11}|\d{11}-\d{1}但是没有用。

有什么想法吗?

4 个答案:

答案 0 :(得分:1)

许多标记电话号码的方法。为什么不删除除数字以外的所有内容并检查长度?

请注意,有几种方法可以指示“扩展名”:

+1 212 555 1212 ext.35

答案 1 :(得分:0)

如果交替的第一部分匹配,那么正则表达式引擎甚至不会尝试第二部分。

假设您要匹配三位,11位或11位连字符1位数字,则可以使用外观确保前后字符不是数字。< / p>

(?<!\d)(\d{3}|\d{11}|\d{11}-\d{1})(?!\d)

答案 2 :(得分:0)

\ d {7} + \ d {4}将选择一个十一位数字。我无法让\ d {11}真正工作。

答案 3 :(得分:0)

这应该有效:/(?:^|(?<=\D))(\d{3}|\d{11}|\d{11}-\d{1})(?:$|(?=\D))/
或合并/(?:^|(?<!\d))(\d{3}|\d{11}(?:-\d{1})?)(?:$|(?![\d-]))/

展开:

/ (?:^ | (?<!\d))       # either start of string or not a digit before us
  (                     # capture grp 1
      \d{3}                 # a 3 digit number
    |                     # or
      \d{11}                # a 11 digit number
      (?:-\d{1})?           # optional '-' pluss 1 digit number
  )                     # end capture grp 1
  (?:$ | (?![\d-]))     # either end of string or not a digit nor '-' after us
/