Php 正则表达式美国电话号码

Php 正则表达式美国电话号码,php,regex,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)\.?

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

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}))?$

^(?:1(?:[.-])?(?:\(?=\d{3}\))([2-9]\d{2})(?:(?在我看来,您可以简单地在开始时替换此部件:

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

^(?:\(?\+?1\)?(?:[. -])?)?
或者,如果要严格要求括号匹配:

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

我会将下一部分合并到您的regexp中,以匹配其他电话:

(?:\(\+\d\)\s)
它表示带数字的加号。如果括号内有更多的数字或括号后有更多的空格,则对其进行调整。最终的regexp可能是这样的

^(?:(?: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})(?:^(?)在询问regex问题时,总是有助于了解您使用的语言。最好简单地将
/[^0-9x]/
替换为
”“”
然后在
x
上拆分字符串。第一部分应该是10-11个字符,如果存在扩展名,则将是第二部分。@zzzzBov-如果正在进行验证,或者这是在寻找嵌入其他文本中的电话号码,则这将不起作用。对不起,这是php。电话号码本身就有。只有数千个,我是checking查找有效的扩展名,并将扩展名拆分为另一列。@JustinMorgan,如果扩展名没有用
x
字符分隔,则此操作也不起作用。如果搜索是目标,请使用一组常见的电话号码模式作为各自的正则表达式,而不是试图创建一个庞然大物。
^
  (?:
    (?:1(?:[. -])?)?
    (?:\((?=\d{3}\)))?
      |
    (?:\(\+\d\)\s)
   )?
([2-9]\d{2})(?:^(?<=\(\d{3})\))? ?(?:(?<=\d{3})[.-])?([2-9]\d{2})[. -]?(\d{4})(?: (?i:ext)\.? ?(\d{1,5}))?$