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

我环顾了Web/SO,但没有找到适合我需要的任何解决方案。

老实说,我有2.5年的Web编程经验,但是我对RegEX很感兴趣。

这是我写的(\d{3}+\-\d{3}+\-\d{4}+)的RegEX

但它只检测589-845-2889
这是我要提取的电话号码。

589-845-2889

(589)-845-2889

589.845.2889

589 845 2889

5898452889

(589) 845 2889

请告诉我如何在单个用于PHP的Regex中实现这一壮举。

编辑:

如果您觉得用户可以输入其他格式的美国号码,请同时提及,并将其包括在RegEX中。

附言:

实际上,我正在尝试抓取Craiglist,并且用户可能以任何可能的格式发布了他们的电话号码。

最佳答案

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

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

RegEx Demo
  • (\()?与可选的(匹配,并将其捕获在组#1
  • (?(1)\))是一种条件模式,仅在组#1不为空时匹配结束),即匹配项的左侧存在(
  • 关于php - 从字符串中提取美国电话号码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38201863/

    10-11 00:00