Прежде всего, ваш валидатор формата, очевидно, подходит только для номеров NANP (код страны +1).Будет ли ваше приложение использоваться кем-то с номером телефона из-за пределов Северной Америки?Если это так, вы не хотите, чтобы эти люди не вводили абсолютно действительный [международный] номер.
Во-вторых, ваша проверка неверна.Номера NANP имеют вид NXX NXX XXXX
, где N
- это цифра 2-9, а X
- это цифра 0-9.Кроме того, коды городов и обмены могут не принимать форму N11
(заканчиваются двумя), чтобы избежать путаницы со специальными службами , за исключением номеров в негеографическом коде зоны (800, 888, 877, 866,855, 900) может иметь обмен N11
.
Таким образом, ваше регулярное выражение передаст номер (123) 123 4566, даже если это недопустимый номер телефона.Вы можете исправить это, заменив \d{3}
на [2-9]{1}\d{2}
.
Наконец, у меня возникает ощущение, что вы проверяете пользовательский ввод в веб-браузере.Помните, что проверка на стороне клиента только удобство , которое вы предоставляете пользователю ;вам все еще нужно проверить все входные данные (снова) на сервере.
TL; DR не используйте регулярное выражение для проверки сложных реальных данных, таких как телефонные номера или URL .Используйте специализированную библиотеку .