IvanIlyasov
@IvanIlyasov
Познаю мир

Как улучшить регулярку номера телефона?

Нашел шикарную регулярку для номера телефона: ^((8|\+7)[\- ]?)?(\(?\d{3}\)?[\- ]?)?[\d\- ]{7,10}$
Взял на Хабре тут: habrahabr.ru/post/110731

Оказалась есть одна проблемка. Не валидирует такие вариации:
8 (900) 333-22-22
8 (900) 22-333-22
8 (900) 22-22-333
8 (900) 4444-333
8 (900) 22-22-333
8 (900) 333-1-333
А так же с +7:
+7 (900) 333-22-22
+7 (900) 22-333-22
+7 (900) 22-22-333
+7 (900) 4444-333
+7 (900) 22-22-333
+7 (900) 333-1-333
И то же самое, только вместо тире - пробел:
8 (900) 333 22 22
8 (900) 22 333 22
8 (900) 22 22 333
8 (900) 4444 333
8 (900) 22 22 333
8 (900) 333 1 333
А так же с +7:
+7 (900) 333 22 22
+7 (900) 22 333 22
+7 (900) 22 22 333
+7 (900) 4444 333
+7 (900) 22 22 333
+7 (900) 333 1 333

Что добавить? Как улучшить? Подскажите, пожалуйста. Плохо разбираюсь в этом
  • Вопрос задан
  • 207 просмотров
Пригласить эксперта
Ответы на вопрос 4
@neol
А вам принципиально сохранять номера именно так, как их ввели?
Лично я предпочитаю отбрасывать всё, что не является цифрами, и проверять получившуюся строку: если в ней 10 цифр, значит это может быть номером телефона.

В качестве бонуса: операции с такими стандартизированными номерами значительно проще для СУБД, а выводить вы их можете в любом удобном формате.
Ответ написан
Комментировать
vruzin
@vruzin
Если говорить про ввод телефона пользователем и проверять на валидность, то лучше вот этого я ничего не видел andr-04.github.io/inputmask-multi/ru.html
НО, это не регулярка, а плагин для обработки форм. Возможно именно такой Вам и нужен.
Ответ написан
Gorily
@Gorily
А вам валидировать или парсить из текста?
Если валидировать, то я для этих целей использую libphonenumber (https://github.com/googlei18n/libphonenumber), он есть для многих языков программирования. Очень удобная штука.
Если говорить про регулярки, то для извлечения из текста использую подобную (C#):
new Regex(@"(7|8)?\s*(\(|-|\s)?\d{3}(\)|-|\s)?\s*\d{3}(-|\s)?\d{2}(-|\s)?\d{2}([^\d]|$)", RegexOptions.Compiled)
Ответ написан
@heartdevil
плыву как воздушный шарик
Привет

Лучше используйте строгую маску. Плагин на jquery. Пример. Кликните на демо.

Ну а если вы номера никак не обрабатываете, то и париться не надо.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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