How to Validate Phone Numbers¶
To check that phone numbers are well-formed, you can use a regular expression.
USA and Canada¶
from datatest import validate
pattern = r'^\(\d{3}\)[ ]\d{3}-\d{4}$'
data = [
'(914) 232-9901',
'(914) 737-9938',
'(213) 888-7636',
'(202) 965-2900',
'(858) 651-5050',
]
validate.regex(data, pattern, msg='must use phone number format')
For other common US and Canadian formats, you can use the regex patterns:
pattern |
examples |
---|---|
|
(914) 232-9901 |
|
914-232-9901 |
|
1-914-232-9901 |
+1-914-232-9901 |
India¶
import re
from datatest import validate
indian_phone_format = re.compile(r'''^
(\+91[ ])? # Optional international code.
(\(0\))? # Optional trunk prefix.
# 10 digit codes with area & number splits.
(
\d{10} # xxxxxxxxxx
| \d{5}[ ]\d{5} # xxxxx xxxxx
| \d{4}[ ]\d{6} # xxxx xxxxxx
| \d{3}[ ]\d{7} # xxx xxxxxxx
| \d{2}[ ]\d{8} # xx xxxxxxxx
)
$''', re.VERBOSE)
data = [
'+91 (0)99999 99999',
'+91 99999 99999',
'9999999999',
'99999 99999',
'9999 999999',
'999 9999999',
'99 99999999',
]
validate(data, indian_phone_format, msg='must use phone number format')
United Kingdom¶
import re
from datatest import validate
uk_phone_format = re.compile(r'''^(
# 10 digit NSNs (leading zero doesn't count)
\(01\d{2}[ ]\d{2}\d\)[ ]\d{2}[ ]\d{3} # (01xx xx) xx xxx
| \(01\d{3}\)[ ]\d{3}[ ]\d{3} # (01xxx) xxx xxx
| \(01\d{2}\)[ ]\d{3}[ ]\d{4} # (01xx) xxx xxxx
| \(02\d\)[ ]\d{4}[ ]\d{4} # (02x) xxxx xxxx
| 0\d{3}[ ]\d{3}[ ]\d{4} # 0xxx xxx xxxx
| 0\d{2}[ ]\d{4}[ ]\d{4} # 0xx xxxx xxxx
| 07\d{3}[ ]\d{3}[ ]\d{3} # 07xxx xxx xxx
# 9 digit NSNs
| \(0169[ ]77\)[ ]\d{4} # (0169 77) xxxx
| \(01\d{3}\)[ ]\d{2}[ ]\d{3} # (01xxx) xx xxx
| 0500[ ]\d{3}[ ]\d{3} # 0500 xxx xxx
| 0800[ ]\d{3}[ ]\d{3} # 0800 xxx xxx
)$''', re.VERBOSE)
data = [
'(01257) 421 282',
'(01736) 759 307',
'(0169 77) 3452',
'0116 319 5885',
'0191 384 6777',
'020 8399 0617',
]
validate(data, uk_phone_format, msg='must use phone number format')