Data quality · 2026-09-11 · 8 min read · By Arden Talbot, founder of SheetLink
Phone number fields and the format problem
No field generates more bad data for less benefit. The fix is not stricter validation, it is deciding what you actually need the number for.
The field everyone gets wrong
Ask ten sites for a phone number and you will get ten different behaviours: some reject spaces, some demand a country code, some silently strip characters, some accept anything at all.
The result is a column containing every variation a human can produce, plus a set of people who gave up because their perfectly valid number was refused.
Both outcomes come from the same mistake, which is treating a phone number as a format problem rather than a purpose problem.
The right first question is not how do I validate this, it is what am I going to do with it.
That question is answerable in a sentence and it settles the rest. Once you know whether a person or a machine will use the number, the format rules follow, and most of the arguments about what the field should accept turn out to have been about nothing.
Why numbers are harder than they look
Length varies by country, and within countries. Leading zeros are significant in many national formats and meaningless in others. The same number can be written with a country code, without one, with a leading plus, with brackets around an area code, or with any of several separators.
Extensions add another dimension entirely, and there is no universal way to write one.
Meanwhile people type what they are used to. A customer in one country writes their number the way it appears on their own business card, which is unlikely to match the pattern you had in mind.
Any validation rule strict enough to normalise all of that is strict enough to reject a real customer, which is the trade nobody consciously makes.
What strict validation actually costs
Rejecting a submission because a phone number did not match a pattern is one of the more expensive things a form can do, because it happens at the last moment before conversion.
The person has already written their message. They hit submit, get told their number is invalid, and now have to guess what shape you wanted. Some will try three variations. Some will leave.
And the strictness rarely earns its keep, because the failure mode it prevents is a slightly untidy column rather than anything operationally serious.
This is the general principle behind field-level friction: the cost is paid by the people most likely to be genuine, at the moment they are most likely to abandon.
It also lands unevenly. The visitors most likely to be rejected are the ones furthest from your assumed default, which usually means international customers and mobile users, and those are rarely the segments you can afford to shed.
Decide the purpose first
There are only three realistic purposes, and each implies a different treatment.
If a human is going to read the number and dial it, almost anything works. Store what they typed. A person can interpret brackets and spaces without assistance.
If software is going to dial or message it, you need a canonical form, and you should normalise rather than demand. Accept what they type, convert to a standard form on your side, and keep the original alongside in case the conversion was wrong.
If it is only there because forms usually have one, remove it. That is a real answer and more often the correct one than people expect.
Normalise rather than reject
The pattern that works is permissive input, canonical storage. Accept the number in whatever form it arrives, then produce a cleaned version in a second column.
Keeping both matters. Normalisation involves assumptions, especially about country, and an assumption that turns out wrong is recoverable only if the original is still there.
For international use the standard target format is the one defined by the ITU, written with a leading plus and the country code, which is unambiguous and dialable from anywhere.
Establishing the country is the hard part when it is not stated. A country field, or the visitor's locale, or simply defaulting to your primary market and flagging the rest for review, are all better than guessing silently.
The spreadsheet trap
A phone number in a spreadsheet has a specific and infuriating failure: it gets interpreted as a number.
A value like 07700 900123 loses its leading zero and becomes 7700900123. A number with a plus can be read as a formula. A long digit string can be rendered in scientific notation. All three are silent, and all three are discovered when someone tries to call.
The defence is to ensure the value arrives as text rather than as a numeric type, which is a property of how the row is written rather than something you can fix by formatting the column afterwards. Once the leading zero has been discarded on write, formatting will not bring it back. It is worth checking against your own sheet rather than assuming, since the behaviour differs between how rows are appended.
It is closely related to the formula interpretation problem, and the defence is the same: control what happens at the moment of writing.
Input helpers that genuinely help
On the page, a few small things reduce the mess without rejecting anybody.
Set the input type so mobile browsers show a numeric keypad. Provide a placeholder showing the format you prefer, since most people will follow an example. If you serve one country predominantly, say which format you expect rather than leaving people to guess.
Avoid input masks that fight the user. A mask built for one national format is actively hostile to everyone else, and masks that reformat while typing are a well-known source of frustration and errors.
Formatting hints are advice; validation is a gate. Prefer advice.
Required or optional
Making a phone number mandatory on a contact form is worth a hard look. Many people will not give one, and a meaningful proportion of those will enter something false rather than abandon.
That is the worst outcome available: you lose the honest non-answer and gain a fabricated number that wastes somebody's time later.
Optional fields collect fewer numbers and better ones. If the number genuinely is essential for the service, say why beside the field, because a stated reason materially increases completion. The same logic runs through every field on the form, which is why screening after the fact consistently beats gatekeeping at the input.
Where a number is only needed for some enquiry types, ask conditionally rather than universally.
What to do with what you already have
An existing column of mixed formats can be improved without touching the form.
Add a normalised column beside it rather than editing in place, so the originals survive. Flag anything that cannot be normalised confidently instead of deleting it, since a number that fails your parser is often still dialable by a person.
Watch specifically for values that have already lost a leading zero or been rendered in scientific notation. Those are not recoverable from the sheet, and finding them tells you the write path needs fixing before any cleanup is worth doing.
Fix the intake first, then clean the history. Cleaning a column that is still being fed badly is a task you get to repeat.
A workable setup
One optional text field, an input type that brings up the right keypad, a placeholder showing your preferred format, no rejection except for something obviously not a phone number.
Store what they typed as text. Produce a normalised column alongside it. Flag the ones you could not confidently convert.
The result is a column you can actually use, a form nobody abandons at the last field, and no arguments with customers about how their own phone number should be written.
It fits the same pattern as every other field on a well-behaved contact form: ask for less, accept more, and do the tidying on your own side where a mistake costs nothing.
The underlying point
Validation should protect against data that cannot be used, not against data that is not tidy. Tidiness is achievable afterwards, on your side, without costing a single submission.
Applied to phone numbers, that single principle resolves almost every decision this article covers.
FAQ
Should I require a country code?
Only if you genuinely serve multiple countries and software will use the number. Otherwise it is friction for the majority of your visitors, who will write their number the way they always do regardless of what you ask for.
What is the best storage format?
Text, always, so leading zeros and plus signs survive. If software will use the number, keep a normalised international form in a second column while retaining the original exactly as submitted.
Why did my sheet eat the leading zero?
Because the value was written as a number rather than as text. This happens at the moment of writing, and formatting the column afterwards will not restore the digit. Fix the intake before cleaning up.
Are input masks a good idea?
Rarely. A mask encodes one national format and is hostile to everyone else, and masks that reformat as you type are a known source of errors. A placeholder showing your preferred format achieves most of the benefit with none of the harm.
Should the phone field be required?
Usually not on a general contact form. Requiring it produces abandonment and fabricated numbers, both of which are worse than a blank field. Where it is genuinely necessary, explain why beside the input.
How do I handle extensions?
Accept them in the same field and preserve them in the original value. There is no universal notation, so trying to parse them reliably is not worth the effort for most businesses.
Can I validate that a number is real?
Only by contacting it, which is not appropriate at submission time on a contact form. Format checks confirm shape, not existence, and treating a passing format check as proof of a working number is a common mistake.
What should I do with numbers I cannot normalise?
Flag them for human review rather than discarding them. A number your parser rejects is frequently perfectly dialable by a person who can see the context.
Capture it, keep it intact
Values arrive in your sheet as text exactly as submitted, so a leading zero or a country code is still there when you need to dial it.
Start freeSee the live demoField naming conventions for clean columnsEmail validation without annoying people
