Форматы записи номеров

Телефонные номера как объект валидации в Validator.js рассматриваются не как фиксированная строковая сущность, а как набор допустимых форматов, зависящих от страны, стандарта набора и контекста использования. Валидация в этом случае опирается не только на проверку символов, но и на структуру номера: код страны, длину, допустимые разделители, наличие служебных префиксов и расширений.


Формат E.164 является базовым стандартом представления телефонных номеров в международных системах связи.

Ключевые особенности:

  • обязательный символ + в начале;
  • код страны без ведущих нулей;
  • последовательность цифр без пробелов и разделителей;
  • максимальная длина — до 15 цифр (без символа +).

Пример:

  • +14155552671
  • +74951234567

В контексте Validator.js такие строки часто предварительно нормализуются, поскольку библиотека сама по себе не приводит номер к E.164, а лишь проверяет соответствие заданному формату или локали.


Международный и национальный формат представления

Помимо E.164, широко используются два практических представления:

Международный формат с разделителями

Допускает визуальное разделение номера:

  • пробелы;
  • дефисы;
  • скобки.

Примеры:

  • +1 (415) 555-2671
  • +7 495 123-45-67

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

Национальный формат

Используется внутри страны без международного префикса:

  • 8 (495) 123-45-67
  • 0495 1234567

Validator.js при работе с локалями может учитывать подобные записи через isMobilePhone, где правила различаются в зависимости от региона.


Распространённые вариации записи

В реальных данных телефонные номера редко соответствуют единому стандарту. Часто встречаются вариации:

  • +7(495)1234567
  • +7 495.123.45.67
  • 8-495-123-45-67
  • 4951234567

Причины вариативности:

  • пользовательский ввод без маски;
  • экспорт из CRM-систем;
  • копирование из документов;
  • автоматическое форматирование устройств.

Validator.js не нормализует такие данные автоматически, поэтому перед проверкой часто применяется предварительная очистка строки.


Расширения и добавочные номера

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

Типичные формы записи:

  • +1 202 555 0147 ext. 123
  • +44 20 7946 0958 x45
  • +7 495 123 45 67 доб. 321

Особенности:

  • наличие маркеров ext, x, доб.;
  • произвольная длина добавочного номера;
  • разделение пробелами или точками.

В Validator.js такие конструкции не обрабатываются автоматически функцией isMobilePhone, поэтому их обычно выделяют отдельно перед основной проверкой.


Локали в Validator.js (isMobilePhone)

Функция isMobilePhone поддерживает множество региональных форматов, где правила отличаются:

  • длина номера;
  • допустимые префиксы;
  • наличие обязательного кода страны;
  • структура мобильного номера.

Примеры локалей:

  • ru-RU
  • en-US
  • en-GB
  • de-DE
  • fr-FR

Каждая локаль определяет собственные регулярные выражения и списки допустимых префиксов операторов.

Особенности поведения:

  • один и тот же номер может быть валиден в одной локали и невалиден в другой;
  • некоторые локали допускают только мобильные номера, исключая городские;
  • часть локалей требует строгого международного формата.

Нормализация перед валидацией

Перед использованием Validator.js часто выполняется предварительная обработка строки:

Основные шаги:

  • удаление пробелов и символов форматирования;
  • замена скобок и дефисов;
  • приведение префиксов к единому виду;
  • удаление добавочных номеров.

Типичный результат нормализации:

  • исходное: +7 (495) 123-45-67
  • результат: +74951234567

Нормализация критична, поскольку большинство функций Validator.js предполагают относительно чистый ввод.


Регулярные выражения и кастомные проверки

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

Пример базового шаблона E.164:

^\+[1-9]\d{1,14}$

Пример более гибкого шаблона:

^\+?[0-9\s\-()]{7,20}$

Однако такие выражения:

  • не учитывают локальные особенности;
  • могут пропускать некорректные номера;
  • требуют дополнительной логики проверки длины и кода страны.

Validator.js в таких случаях используется как слой финальной проверки после первичной фильтрации.


Ошибки парсинга и неоднозначные форматы

При обработке телефонных номеров часто возникают неоднозначности:

  • отсутствие кода страны (1234567890);
  • смешение форматов (+7 8 495...);
  • лишние символы (tel:+7-495-...);
  • неполные добавочные номера (ext без значения).

Типичные ошибки:

  • ложные срабатывания при слишком мягких регулярных выражениях;
  • отклонение корректных номеров из-за строгой локали;
  • некорректная интерпретация ведущего нуля в национальных форматах.

Validator.js в таких ситуациях работает строго по правилам выбранной функции и не пытается угадывать намерение пользователя.


Практика использования в Validator.js

В реальных сценариях проверка телефонных номеров строится по многоуровневой схеме:

  1. первичная очистка строки;
  2. проверка на базовый допустимый набор символов;
  3. применение isMobilePhone с конкретной локалью;
  4. при необходимости — дополнительная проверка E.164;
  5. выделение и обработка добавочного номера отдельно.

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