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 []
下一篇: 从字符串中提取美国电话号码