International Phone Number Validation: E.164, Country Codes and Pitfalls
If your site serves several countries, phone number handling is where verification quietly breaks. People type spaces, zeros and brackets, and every country writes numbers differently. A single standard format fixes most of it.
The standard format
E.164 writes a number as a plus sign, the country code and the national number, with no spaces or other characters and a maximum length of fifteen digits. Store this form in your database, and show the nicer local format only on screen.
Typical input problems
| User types | Problem | Fix |
|---|---|---|
| 0300 1234567 | Leading national zero | Remove the zero when you add the country code |
| +92 300 123 4567 | Spaces | Strip spaces and symbols |
| 0092300... | International prefix | Convert 00 to + |
| 300 1234567 | No country code | Use a country selector |
Use a library
Phone numbering rules change often. Use a maintained validation library instead of your own regex, and update it. Regex alone cannot know which ranges are valid in a given country.
Select the country, then the number
- A country dropdown with a default from the user's locale, not forced.
- The dial code is shown next to the field.
- Validation after the country is chosen.
Know what validation cannot tell you
A number can be valid in format and still not exist, not accept SMS or be a virtual line. Format checking is not proof of ownership. The OTP is the proof. See country codes explained.
Testing
Test several countries with real numbers or with rented virtual numbers from the country list.
Edge cases worth testing
- Numbers with extensions.
- Numbers from countries with variable length.
- Pasted numbers with hidden characters.
- Right-to-left languages in the form.
Storing and displaying
Save the E.164 value and the country in separate fields. Show the number in the local format when you display it, so that users trust what they see.
Questions people ask
Why store E.164?
One format makes searching, de-duplicating and sending consistent.
Is regex enough?
No. Use a maintained library.
Related guides and pages
Create a free OtpGet account and try it with a small balance.