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

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

我浏览过网页/ 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

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

编辑:

如果您认为用户可以输入任何其他美国数字格式,那么也请提及,并将其包含在RegEX中。

PS:

其实我试图抓住Craiglist,用户可能会以任何可能的格式发布他们的电话号码。


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

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

RegEx演示

  • (()?匹配可选项(并将其捕获到组#1中
  • (?(1)))是条件模式匹配关闭)只有组#1不为空ie (存在于比赛的左侧。

  • 最后,它的工作原理:

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

    在记事本++中测试

    链接地址: http://www.djcxy.com/p/34949.html

    上一篇: Extract US phone numbers from a string

    下一篇: Transfer large file via SFTP in PHP