Регулярное выражение телефонный номер

Всем привет. У меня такой вопрос кто-нибудь знает RegExp шаблон для номера телефона (СНГ)? Желательно чтобы умел разбирать:

  1. ( и )
  2. + (в начале номера)
  3. (это пробел)
  4. Обычные городские номера

Тоже столкнулся с проблемой валидизации телефонных номеров.
Телефоны берутся с участников вебинаров, на которые записываются люди из очень разных стран.
Соответственно, со всеми предыдущими схемами возникают проблемы:
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

Я пытаюсь собрать всеобъемлющее регулярное выражение для проверки телефонных номеров. В идеале он будет обрабатывать международные форматы, но он должен обрабатывать форматы США, включая следующие:

  • 1-234-567-8901
  • 1-234-567-8901 x1234
  • 1-234-567-8901 ext1234
  • 1 (234) 567-8901
  • 1.234.567.8901
  • 1/234/567/8901
  • 12345678901
Читайте также  Рисунки карандашом для срисовки цветы не сложные

Я отвечу своей текущей попыткой, но Я надеюсь, что у кого-то есть что-то лучшее и/или более элегантное.

30 ответов

лучший вариант. просто очистите все нецифровые символы на входе (кроме знаков " x "и"+"), заботясь из-за британской тенденции писать числа в нестандартной форме +44 (0) . когда вас попросят использовать международный префикс (в этом конкретном случае вы должны отказаться от (0) полностью).

затем вы получаете такие значения, как:

затем, когда вы отобразите, переформатируйте содержимое своего сердца. например,

оказывается, для этого есть что-то вроде спецификации, по крайней мере для Северной Америки, называемой NANP.

вам нужно точно указать, что вы хотите. Что такое юридические разделители? Пробелы, тире и точки? Никаких разделителей? Можно ли смешивать разделители (например, +0.111-222.3333)? Как будут обрабатываться расширения (например, 111-222-3333 x 44444)? Насчет спец. номера, как 911? Код зоны будет необязательным или обязательным?

здесь регулярное выражение для 7 или 10-значного числа с разрешенными расширениями разделителями являются пробелы, тире или периоды:

если пользователь хочет дать вам свой номер телефона, то доверьтесь ему, чтобы получить его правильно. Если он не хочет давать его вам, то заставляя его ввести действительный номер, он либо отправит его на сайт конкурента, либо заставит его ввести случайную строку, которая соответствует вашему регулярному выражению. Возможно, у меня даже возникнет соблазн посмотреть номер секс-линии премиум-класса и вместо этого ввести его.

Я бы также рассмотрел любую из следующих допустимых записей на веб-сайте:

я бы также предложил посмотреть на "libphonenumber " Библиотека Google. Я знаю, что это не regex, но он делает именно то, что вы хотите.

например, он распознает, что:

— это возможное число, но не допустимое число. Он также поддерживает страны за пределами США.

Читайте также  Программа для чистки андроида от вирусов

основные функции:

  • разбор / форматирование / проверка телефонных номеров для всех стран / регионов мир.
  • getNumberType — получает тип номера на основе самого номера; возможность различать фиксированную линию, мобильный, бесплатный, премиум-тариф, общую стоимость, VoIP и личные номера (когда это возможно).
  • isNumberMatch — получает уровень уверенности в том, могут ли два числа быть одинаковыми.
  • getExampleNumber / getExampleNumberByType — обеспечивает корректный пример для всех стран/регионов, с возможностью указания какой тип примеру номер телефона необходимый.
  • isPossibleNumber — быстрое угадывание, является ли число возможным phonenumber, используя только информацию о длине, намного быстрее, чем полная проверка.
  • isValidNumber — полная проверка номера телефона для региона с использованием информации о длине и префиксе.
  • AsYouTypeFormatter — форматирует телефонные номера на лету, когда пользователи вводят каждую цифру.
  • findNumbers — находит номера в Ввод текста.
  • PhoneNumberOfflineGeocoder — обеспечивает географическое информация, связанная с номером телефона.

самая большая проблема с проверкой номера телефона-это очень культурно зависимый.

  • Америка
  • (408) 974–2042 это действительный США
  • (999) 974–2042 is недопустимый США
  • Австралия
    • 0404 999 999 — это действительный австралийские номером
    • (02) 9999 9999 тоже действительный австралийские номером
    • (09) 9999 9999 is недопустимый австралийские номером
    • регулярное выражение отлично подходит для проверки формата номера телефона, но на самом деле оно не сможет проверить действия номер телефона.

      я бы предложил пропустить простое регулярное выражение для тестирования ваш номер телефона против, и с помощью библиотеки, такие как Google libphonenumber (ссылка на проект GitHub).

      используя один из ваших более сложных примерах 1-234-567-8901 x1234 вы получаете следующие данные из libphonenumber (ссылка на онлайн-демо):

      таким образом, вы не только узнаете, действителен ли номер телефона (который он есть), но и получаете согласованное форматирование номера телефона в вашем место действия.

      Читайте также  Радиус описанной окружности около треугольника калькулятор

      в качестве бонуса, libphonenumber имеет ряд наборов данных для проверки правильности телефонных номеров, а также, поэтому проверка числа, такого как +61299999999 (международная версия (02) 9999 9999 ) возвращает как допустимое число с форматированием:

      libphonenumber также дает вам много дополнительных преимуществ, таких как захват местоположения, в котором обнаружен номер телефона, а также получение информации о часовом поясе с телефона номер:

      но недействительный австралийский номер телефона ( (09) 9999 9999 ) возвращает недопустимый номер телефона.

      версия Google имеет код для Java и Javascript, но люди также реализовали библиотеки для других языков, которые используют набор данных телефона Google i18n:

      если вы не уверены, что всегда будете принимать номера из одной локали, и они всегда будут в одном формате, я бы настоятельно рекомендовал не писать свой собственный код для этого и использовать libphonenumber для проверки и отображения телефонных номеров.

      Ссылка на основную публикацию
      Adblock
      detector