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

Uma*_*air 7 php regex

我试图从字符串中提取美国唯一的电话号码.

我浏览了网络/ SO但是没有找到适合我需求的合适解决方案.

说实话,我有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
Run Code Online (Sandbox Code Playgroud)

请告诉我如何在单个Regex for PHP中实现这一壮举.

编辑:

如果您认为用户可以输入任何其他格式的美国号码,也请同时提及,并将其包含在RegEX中.

PS:

实际上我正试图刮掉Craiglist,用户可能已经以任何可能的格式发布了他们的电话号码.

anu*_*ava 2

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

(\()?\d{3}(?(1)\))[-.\h]?\d{3}[-.\h]?\d{4}
Run Code Online (Sandbox Code Playgroud)

正则表达式演示

  • (\()?匹配可选(并将其捕获到组#1中
  • (?(1)\))条件模式),仅当组 #1 不为空(即(出现在匹配项的左侧时)才结束匹配。