从字符串中提取美国电话号码


Extract US phone numbers from a string

我试图从字符串中提取仅限美国的电话号码。

我已经在网上/SO找了一遍,但没有找到任何适合我需要的解决方案。

说实话,我在Web编程方面有2.5年的经验,但是我在RegEX方面很烂。

这里只有RegEX我写的是('d{3}+'-'d{3}+'-'d{4}+)

但只检测589-845-2889

这些是我要提取的电话号码。

589-845-2889
(589)-845-2889
589.845.2889
589 845 2889
5898452889
(589) 845 2889

请告诉我如何在PHP中使用单个Regex实现此壮举。

编辑:

如果您觉得用户可以输入任何其他格式的美国号码,也要提到它,并将其包含在RegEX中。

p。S:

事实上,我正在努力刮craigslist和用户可能已经张贴了他们的电话号码在任何可能的格式。

在PHP (PCRE)中,您可以使用基于条件子模式的正则表达式:

('()?'d{3}(?(1)'))[-.'h]?'d{3}[-.'h]?'d{4}

RegEx演示

  • ('()?匹配可选的(并捕获组#1
  • (?(1)'))条件模式,只有当组#1不为空,即(出现在匹配的左侧时,才匹配关闭)

最后,它成功了:

^('(('d{3})')|('d{3}))['s'-'.]?'d{3}['s'-'.]?'d{4}

在notepad++中测试