我正在尝试从字符串中提取仅限美国的电话号码。
我浏览了网络/ SO但是没有找到适合我需求的合适解决方案。
老实说,我有2。5年的网络编程经验,但我很沮丧。
这里只有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
请告诉我如何在单个Regex for PHP中实现这一壮举。
修改
如果您觉得用户可以输入任何其他格式的美国号码,也请同时提及,并将其包含在RegEX中。
P.S:
实际上我正试图抓住Craiglist,用户可能已经以任何可能的格式发布了他们的电话号码。
答案 0 :(得分:2)
在PHP(PCRE)中,您可以根据conditional subpatterns使用此正则表达式:
(\()?\d{3}(?(1)\))[-.\h]?\d{3}[-.\h]?\d{4}
(\()?
与可选(
匹配,并在第1组(?(1)\))
是条件模式,仅当组#1不为空时匹配结束)
,即匹配左侧存在(
。答案 1 :(得分:1)
最后,它有效:
^(\((\d{3})\)|(\d{3}))[\s\-\.]?\d{3}[\s\-\.]?\d{4}
在notepad ++中测试