Задать вопрос
@kerner
Начинающий сисадмин.

Какое регулярное выражение подойдет для проверки номера телефона?

Здравствуйте!
Подскажите пожалуйста регулярное выражение для использования js для проверки правильности номера телефона который может быть написан в нескольких из этих форматов
8(ddd)ddddddd;
+7(ddd)ddddddd;
8dddddddddd;
+7dddddddddd;
Заранее спасибо.
Проверка будет производится на стране браузера клиента
  • Вопрос задан
  • 158401 просмотр
Подписаться 13 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 6
@kudry
Тоже столкнулся с проблемой валидизации телефонных номеров.
Телефоны берутся с участников вебинаров, на которые записываются люди из очень разных стран.
Соответственно, со всеми предыдущими схемами возникают проблемы:
1) а что если телефон с Украины (не +7-, а +38-)? А из Казахстана? А США (1-)? А Уганда ( +233-)? (из Уганды, правда, пока слушателей не было, но все впереди).
2)В разных местностях приняты самые невообразимые способы разбиения телефона на группы цифр:
8(8888)8-88-88-88 например. или 888(88)88888-888. Да и какие угодно могут возникнуть в будущем.
Поэтому вариант с "дефолтным разбиением типа "8(888)888-88-88 ну совершенно не катит.

Соответственно, я придумал следующий валидатор:
1) В начале могут быть пробелы, после них может быть "+" (а может и не быть)
2) Дальше должна идти группа цифр в количестве от 10 до 14 (мне нужны номера в международном формате; но если кому-то нужны более короткие - можно исправить диапазон длин).
3) Поскольку я не знаю, как люди группируют цифры - до и после каждой цифры может быть один из 8 знаков ("-", " ", "_", "(", ")", ":", "=", "+"). Это значит, что между двумя цифрами могут быть любые два из этих знаков.

В итоге получилось очень коротко и понятно )) :
/^(\s*)?(\+)?([- _():=+]?\d[- _():=+]?){10,14}(\s*)?$/

Съедает следующие телефоны:
+7(903)888-88-88
8(999)99-999-99
+380(67)777-7-777
001-541-754-3010
+1-541-754-3010
19-49-89-636-48018
+233 205599853
Ответ написан
Зеленый свет для:
+79261234567
89261234567
79261234567
+7 926 123 45 67
8(926)123-45-67
123-45-67
9261234567
79261234567
(495)1234567
(495) 123 45 67
89261234567
8-926-123-45-67
8 927 1234 234
8 927 12 12 888
8 927 12 555 12
8 927 123 8 123

^((8|\+7)[\- ]?)?(\(?\d{3}\)?[\- ]?)?[\d\- ]{7,10}$
Ответ написан
Мне трудно себе представить каким способом вы тестировали это регулярное выражение, но оно начинает срабатывать уже при шестизначном значении, например 232323, а максимально можно ввести 14 цифровых знаков. из за того что у вас стоят знаки ? после групп, которые допускают что эта группа может появиться 1 или 0 раз, из-за этого можно вводить просто кучу цифр.
Я лично сделал вот такое бы выражение, не такое запутанное как ваше
^\+?[78][-\(]?\d{3}\)?-?\d{3}-?\d{2}-?\d{2}$
Оно уж точно не пропустит лишних цифр, и допускает варианты:
89103123167
+7-910-221-22-22
+7(910)-221-22-22
ну и в таком духе
Ответ написан
iiil
@iiil
Инженер и вэб-дизайнер, рисую.
Набираем в гугле запрос "регулярное выражение для телефона"
Первая ссылка
Ну и другие посмотрите
https://www.google.ru/search?q=%D1%80%D0%B5%D0%B3%...
Ответ написан
Tesby
@Tesby
намного эффективней и нагляднее воспользоваться маской digitalbush.com/projects/masked-input-plugin
Ответ написан
@kerner Автор вопроса
Начинающий сисадмин.
Всем огромное спасибо!
Просмотрел все варианты и собрал на основе этого вот такую регулярное выражение ^((8|\+7)[\- ]?)?(\(?\d{3,4}\)?[\- ]?)?[\d\- ]{5,10}$ - которая по тестам выполняет условия необходимые для проверки
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы