📱 Phone Number Formatter (by Country)
Format phone numbers for 30+ countries into international (+81 90-1234-5678), national, E.164 and tel: URI forms in one shot. Includes digit-count and country-prefix validation, bulk processing and CSV export.
🔒 About Privacy
- ・All processing runs entirely in your browser (JavaScript)
- ・The phone numbers you enter are never sent to any server
| Input | International | National | E.164 | tel: | Status |
|---|
📖 Where people get stuck
Formats phone numbers using the grouping rules of more than thirty countries, giving you the international form, the national form, E.164 and a tel: URI at once. It also handles bulk input, one number per line, with CSV export, and everything runs in the browser. What happens here is formatting, not verification — an unallocated range, a disconnected number and an entirely fictional one all format just as neatly, provided the digit count fits.
| Case | What happens | What to do |
|---|---|---|
| The leading zero disappears, or doubles up | The zero at the front of a national number is the trunk prefix, and it is not part of the number — it is a marker used only when dialling domestically. So it is dropped for the international form, and 090-1234-5678 becomes +81 90 1234 5678. Forgetting to drop it produces +81 090..., which is not a real number. The costliest case in practice is Excel and CSV: open 0312345678 and it is judged a number, the leading zero goes, and you have 312345678 — and once saved that way it cannot be recovered. |
Standardise stored values on E.164 (+819012345678) — it carries the country code, has no separators and is the one form that is globally unique. Format to the national style only for display. When handling CSV, set the column type to text before opening it: in Excel, use the text import wizard from the Data tab and mark the column as text. Double-clicking the file will break it every time. E.164 begins with +, so Excel will not treat it as a number, but importing explicitly as text is more reliable than relying on that. |
| Landline numbers are grouped in the wrong place | Japanese area codes vary from one to four digits — Tokyo is 03, Yokohama is 045, and parts of Niigata run to five digits, as in 02567. Where the break falls is set case by case in the national numbering plan and cannot be derived from the length. Because a longer area code pairs with a shorter exchange code, two numbers of identical total length can break in different places. Mobile (070, 080, 090) and IP telephony (050) have fixed shapes and are easy, but grouping landlines perfectly requires the whole numbering plan as data. |
Do not expect perfection from landline grouping. The break position is a matter of legibility and has nothing to do with whether the call connects — 0312345678 and 03-1234-5678 are the same number and both dial fine. So put E.164 straight into your tel: URIs and your database, and treat the separators as display decoration. Where accurate grouping is a business requirement — invoices, official documents — use Google libphonenumber, which embeds the numbering-plan data and operates on an entirely different scale from this tool. |
| A nonexistent number formats just as nicely | A format check only asks whether the length and prefix are plausible for that country. So ranges not yet allocated, numbers disconnected years ago and the fictional numbers used in films all look valid. Treating that as verified in a form is risky: you find out it is undeliverable only after sending the SMS code. The failure runs the other way too — an over-strict validator rejects newly opened ranges, international numbers and numbers with an extension, turning away legitimate users at the door. | The only way to verify existence is to actually deliver an SMS or a call. Make your form validation deliberately loose: allow digits, + and separators, and check little beyond the E.164 maximum of fifteen digits. A legitimate number you rejected is a loss you will never see, whereas an invalid number you let through is caught reliably at the next step — that asymmetry is the argument for being loose. On internationalisation, note also that the country code does not identify the country: +1 covers the United States, Canada and more than twenty Caribbean nations, and +7 is shared by Russia and Kazakhstan. |
A phone number can identify a person on its own, which calls for corresponding care: keep it out of access and application logs, keep it out of URL query strings — it ends up in history, referrers and proxy logs — and do not email a CSV of them as an attachment. Everything on this page runs in the browser and no number is transmitted, but from the moment you download the bulk result as CSV, handling it is a matter of your own control: a customer phone list living on in the Downloads folder is a routine sort of incident. Also: E.164 allows at most fifteen digits including the country code, and an extension does not fit inside that — a tel: URI expresses it as +81312345678;ext=1234. Joining an extension to the main number with a hyphen produces a number that cannot be dialled.
📖 How to Use
-
1
Select countryPick a country from 30+ supported. Each has its own digit count, grouping rules and international (country) code.
-
2
Enter the numberSingle mode formats as you type. For multiple numbers, paste into the bulk area and click "Format all".
-
3
Copy result or export CSVYou get international, national, E.164 and tel: URI side by side. Use the CSV button to download all of them at once.
❓ Frequently Asked Questions
What is E.164?
Why not use libphonenumber?
Are numbers sent to your server?
🔗 Related Tools
- ・PII / Secret Masker
- ・Address Splitter
- ・Phone Number Regex Builder — Generate validation regex for 30+ countries in JS/PHP/Python/Ruby/Go/Java
- ・Regex Tester
🐛 Found a bug or issue with this tool?
Free to use, no signup. Even just the steps to reproduce are helpful. Reports go directly to the operator and help us fix issues.
Thanks for your report!
Your report has been delivered to the operator and will be used to improve the tool.