我试图从字符串中提取仅限美国的电话号码。
我已经在网上/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++中测试