I need to add a regular expression that matches all possible valid E.164 formatted phone numbers.
This regex works fine for for North American phone numbers, but I need something that will work for international numbers as well:
^(+1|1)?([2-9]\d\d[2-9]\d{6})$
Example: +13172222222 matches 13172222222 still matches because +1 or 1 are optional 3172222222 still matches because +1 or 1 are optional 3171222222 does not match and is not a valid NANPA number.
Source: Freeswitch.org
I also came across this related question, but I think that it is way too crazy for my needs. In my case, I am simply validating an entry for a blacklist, which I'm comparing to incoming Twilio data; so, I care much less about weather a country code is valid. I really only need to test if a number matches the general E.164 form, rather than assuming it's a NANPA.
To be better understand what I need to match, here is an example from the Twilio Documentation:
All phone numbers in requests from Twilio are in E.164 format if possible. For example, (415) 555-4345 would come through as '+14155554345'. However, there are occasionally cases where Twilio cannot normalize an incoming caller ID to E.164. In these situations Twilio will report the raw caller ID string.
I want to match something like +14155554345, but not (415) 555-4345, 415555434, 555-4345 or 5554345. The regex should not restrict itself to only matching the US country code though. Basically, it should match the +xxxxxxxxxxx format. I also think the number could be longer, as there are multi-digit country codes, such as in the UK. T-Mobile's UK number is +447953966150 I'll update this if I can come up with a better example.
E. 164 is an international numbering plan for public telephone systems in which each assigned number contains a country code (CC), a national destination code (NDC), and a subscriber number (SN). There can be up to 15 digits in an E. 164 number.
This number allows phone calls and text messages can be correctly routed to individual phones in different countries. E. 164 numbers are formatted [+] [country code] [subscriber number including area code] and can have a maximum of fifteen digits.
E. 164 defines a format for international telephone numbers. Numbers are usually prefixed with the plus sign (+), include the international country calling code and are limited to a maximum of 15 digits.
The accepted answer is good, except an E.164 number can have up to 15 digits. The specification also doesn't indicate a minimum, so I wouldn't necessarily count on 10.
It should be ^\+?[1-9]\d{1,14}$
See http://en.wikipedia.org/wiki/E.164
I think until you have a great set of examples, you are best served by a flexible regex. This one will match a +
followed by 10-14 digits.
^\+?\d{10,14}$
Broken down, this expression means: ^
Match begining of string. \+?
Optionally match a +
symbol. \d{10,14}
Match between 10 and 14 digits. $
Ensure we are at the end of the string.
If you learn that a digit at a particular index must not be 1 or 0, then you can use the [2-9]
at that position, like this:
^\+?\d{6,7}[2-9]\d{3}$
[2-9]
means match any digit from 2 through 9 (don't match 0 or 1.)
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