Разбирайте международные телефонные номера, проверяйте их и преобразуйте в форматы E.164, международный или национальный.
Разбирайте международные телефонные номера, проверяйте их и преобразуйте в форматы E.164, международный или национальный. Разбирайте международные телефонные номера, проверяйте их и преобразуйте в форматы E.164, международный или национальный.
Справочная информация
Как устроены телефонные номера
Международный телефонный номер состоит из трёх логических частей: код страны
для вызова (1 для Северной Америки, 44 для Великобритании, 86 для Китая, 81 для Японии
и так далее), национальный значимый номер (код региона плюс номер абонента)
и необязательное добавочное число. Рекомендация E.164 определяет каноническое
представление: ведущий «+», код страны, затем национальный номер
без разделителей — например, +14155552671. Когда пользователи вводят номера
в свободной форме, они могут добавлять пробелы, дефисы, скобки или ведущие нули,
которые имеют смысл только внутри страны. Хороший парсер нормализует всё это
в структурированные поля.
Почему разбор сложнее, чем кажется
Страны расходятся почти во всём: в длине национальных номеров, в
использовании trunk-префиксов (Китай отбрасывает ведущий 0 при наборе из-за границы,
Великобритания делает то же со своим префиксом 0), мобильных и стационарных префиксах,
а также специальных коротких кодах. 4444 — действительный национальный номер
в одних странах и недействительный в других. Планы нумерации — тоже подвижная мишень:
Бразилия добавила цифру ко всем мобильным номерам в 2016 году, и регулятор каждой
страны публикует изменения. Именно поэтому серьёзные валидаторы используют полную
базу метаданных вместо жёстко заданных регулярных выражений. Библиотека, работающая
на этой странице, включает официальные метаданные Google для каждой страны и территории,
поэтому она знает, например, что мобильные номера Китая состоят из 11 цифр и начинаются с 1.
Использование парсера
Введите номер с «+» или без неё и с кодом страны. Если вы опустите
код страны, выберите страну по умолчанию из выпадающего списка, чтобы парсер
смог определить национальный формат. Инструмент выводит форму E.164,
международное форматирование с пробелами, национальное форматирование, определённую
страну, код вызова, национальный номер, действителен ли номер и возможен ли он,
тип номера (мобильный, стационарный, бесплатный и т. д.), а также
оператора, когда метаданные могут его определить. Номер может быть «возможным»
(правильная длина и форма префикса) без того, чтобы быть «действительным»
(назначенным и правильно структурированным) — обе проверки отображаются.
Практические замечания
Определение страны по «голому» номеру эвристическое: +1 555 2671 однозначно
означает Северную Америку, но короткие номера могут совпадать с несколькими странами. Всегда
указывайте код страны для машинного взаимодействия и храните номера в
формате E.164 в своей базе данных. При проверке пользовательского ввода отдавайте предпочтение
проверкам «возможен» для мгновенной обратной связи и оставьте полные проверки «действителен»
для отправки. Этот инструмент работает полностью в вашем браузере на встроенных
данных libphonenumber-js (MIT) — ничего из введённого вами не передаётся.
Часто задаваемые вопросы
Почему я получаю «возможен, но не действителен»?
«Возможен» означает, что номер соответствует общей длине и форме префикса страны. «Действителен» означает, что это реально назначенный номер согласно официальным метаданным. Многие тестовые номера или неназначенные диапазоны возможны, но не действительны.
Что такое E.164 и зачем его хранить?
E.164 — это стандарт ITU для телефонных номеров: «+», затем код страны, затем национальный номер, максимум 15 цифр. Хранение этой единственной канонической формы делает дедубликацию и международный набор тривиальными, поскольку она однозначна во всех странах.
Можно ли проверить номера без кода страны?
Ненадёжно. Без кода страны парсер вынужден угадывать, а короткие номера могут быть действительны во многих странах. Указывайте страну по умолчанию (или требуйте код), когда ввод не является явно международным.
Как определяется тип номера?
Встроенные метаданные классифицируют диапазоны по префиксу: мобильный, стационарный, бесплатный, платный, VoIP, общая стоимость и другие. Тип отображается только когда метаданные назначают его; иначе появляется дефис.
Куда-либо отправляются мои введённые данные?
Нет. Разбор, проверка и форматирование происходят в вашем браузере с помощью встроенного пакета libphonenumber-js (MIT). Страница полностью работает офлайн после загрузки.
Почему один и тот же номер форматируется по-разному в разных странах?
Международное форматирование группирует цифры согласно собственным правилам страны (например, французские номера группируются парами, американские используют 3-3-4). E.164 остаётся неизменным независимо ни от чего; меняется только форма отображения.