Extract US phone numbers from a string

I am trying to extract US only phone numbers from a string.

I have looked around the web/SO but have not found any suitable solution for my needs.

To be honest, I have 2.5 years of experience in Web Programming but I suck at RegEX.

Here is only RegEX I wrote (d{3}+-d{3}+-d{4}+)

but it only detects 589-845-2889

Here are phone numbers I want to extract.

589-845-2889

(589)-845-2889

589.845.2889

589 845 2889

5898452889

(589) 845 2889

Please tell me how can I achieve this feat in single Regex for PHP.

EDIT:

If you feel any other format of US number a user can enter, also mention that as well, and include that in RegEX as well.

PS:

Actually I am trying to scrape Craiglist and user may have posted their phone number in any possible format.


In PHP (PCRE) you can use this regex based on conditional subpatterns:

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

RegEx Demo

  • (()? matches optional ( and captures it in group #1
  • (?(1))) is conditional pattern that matches closing ) only if group #1 is not null ie ( is present on left of the match.

  • Finally, it works:

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

    tested in notepad++

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

    上一篇: Constexpr转换为const char []

    下一篇: 从字符串中提取美国电话号码