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

时间:2016-07-05 11:06:08

标签: php regex

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

我浏览了网络/ 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,用户可能已经以任何可能的格式发布了他们的电话号码。

2 个答案:

答案 0 :(得分:2)

在PHP(PCRE)中,您可以根据conditional subpatterns使用此正则表达式:

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

RegEx Demo

  • (\()?与可选(匹配,并在第1组
  • 中捕获
  • (?(1)\))条件模式,仅当组#1不为空时匹配结束),即匹配左侧存在(

答案 1 :(得分:1)

最后,它有效:

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

在notepad ++中测试