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.
P.S:
Actually I am trying to scrape Craiglist and user may have posted their phone number in any possible format.
We can use the phonenumbers library to extract phone numbers from a text with Python. The handy phonenumbers. PhoneNumberMatcher() method iterates the text and extract any phone number, whether it is in a domestic or international format.
Mobile phone numbers are not stored as integers, as the integer data type holds values that have the potential to be used in calculations. There is no context for using a mobile phone number as part of a calculation, so it is stored as a STRING value.
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 i.e. (
is present on left of the match.Finally, it works:
^(\((\d{3})\)|(\d{3}))[\s\-\.]?\d{3}[\s\-\.]?\d{4}
tested in notepad++
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With