正则表达我们的电话号码

时间:2011-12-09 21:35:20

标签: php regex

我有一个与以下数字匹配的正则表达式。

8702431273

973-882-9444转6114

1-223-332-2232

然而它不匹配。

(+ 1)623-975-5296

605-367-7321

如何修改它以接受这些。

^(?:1(?:[. -])?)?(?:\((?=\d{3}\)))?([2-9]\d{2})(?:(?<=\(\d{3})\))? ?(?:(?<=\d{3})[.-])?([2-9]\d{2})[. -]?(\d{4})(?: (?i:ext)\.? ?(\d{1,5}))?$

2 个答案:

答案 0 :(得分:1)

在我看来,你可以在开头简单地替换这部分:

^(?:1(?:[. -])?)?

用这个:

^(?:\(?\+?1\)?(?:[. -])?)?

或者如果你想严格匹配括号:

^(?:(?:\((?=.?1\)))?\+?1\)?(?:[. -])?)?

答案 1 :(得分:1)

我会将下一部分合并到你的正则表达式以匹配其他电话:

(?:\(\+\d\)\s)

这意味着带有数字的加号。如果括号内可以有更多数字或者后面有更多空格,请调整它。最终的正则表达式可能是这样的。

^(?:(?:1(?:[. -])?)?(?:\((?=\d{3}\)))?|(?:\(\+\d\)\s))?([2-9]\d{2})(?:^(?<=\(\d{3})\))? ?(?:(?<=\d{3})[.-])?([2-9]\d{2})[. -]?(\d{4})(?: (?i:ext)\.? ?(\d{1,5}))?$

我将我改变的部分划分为适应新电话号码:

^
  (?:
    (?:1(?:[. -])?)?
    (?:\((?=\d{3}\)))?
      |
    (?:\(\+\d\)\s)
   )?
([2-9]\d{2})(?:^(?<=\(\d{3})\))? ?(?:(?<=\d{3})[.-])?([2-9]\d{2})[. -]?(\d{4})(?: (?i:ext)\.? ?(\d{1,5}))?$

在我的测试中,它适用于你发布的五部电话。