Работа с кодами стран

Cleave.js поддерживает форматирование телефонных номеров с учётом международных кодов стран через встроенный механизм phone-режима, позволяющий приводить вводимые данные к единому структурированному виду без необходимости ручного парсинга или сложной валидации. Основная идея заключается в разделении номера на логические блоки, соответствующие национальным правилам нумерации, и автоматическом применении маски в зависимости от выбранной страны.

При активации телефонного режима библиотека начинает интерпретировать ввод как последовательность цифр, где первая значимая часть может рассматриваться как международный код или национальный префикс. В зависимости от конфигурации Cleave.js способен либо фиксировать страну заранее, либо определять её через параметр phoneRegionCode.


Параметр phoneRegionCode задаёт региональную привязку номера и определяет правила разбиения строки на блоки. Например, для США структура номера обычно соответствует шаблону (XXX) XXX-XXXX, тогда как для стран Европы длина блоков и их распределение может отличаться.

Внутри Cleave.js это выражается следующим образом:

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

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


Работа с международным кодом страны

В международных форматах первым элементом номера выступает код страны, начинающийся с символа +. Cleave.js обрабатывает его как часть строки, но логически отделяет от основного номера.

При вводе международного номера происходит следующая последовательность обработки:

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

Важно, что библиотека не выполняет полноценную валидацию соответствия кода страны и номера — она лишь структурирует ввод. Это позволяет использовать Cleave.js совместно с внешними библиотеками валидации, такими как libphonenumber, для более строгой проверки.


Префиксы, маски и адаптивное форматирование

Механизм префиксов в Cleave.js тесно связан с параметром prefix. Он используется для автоматического добавления символов или кодов в начало строки, включая международный + или фиксированный код страны.

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

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

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


Блоковая структура номера и региональные различия

Телефонные номера в Cleave.js разбиваются на блоки, определяемые параметром blocks. Хотя этот параметр чаще используется для кастомных масок, он также влияет на отображение международных форматов при ручной настройке.

Например, структура может быть задана как последовательность:

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

Разделение блоков позволяет:

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

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


Динамическое изменение страны ввода

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

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

  • текущая строка нормализуется (удаляются разделители);
  • применяется новый phoneRegionCode;
  • ввод автоматически переформатируется.

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


Обработка неполных и частично введённых кодов

В процессе ввода международного номера часто возникает ситуация, когда код страны введён частично или отсутствует. Cleave.js в этом случае не блокирует ввод, а продолжает интерпретацию строки как локального номера до появления признака международного формата.

Логика обработки выглядит следующим образом:

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

Такой подход обеспечивает устойчивость интерфейса к незавершённым вводам и снижает необходимость предварительного выбора страны.


Интеграция с внешними валидаторами международных номеров

Cleave.js не выполняет проверку корректности телефонных кодов стран на уровне стандартов ITU. Поэтому его часто комбинируют с библиотеками, которые предоставляют полную модель телефонного плана.

В типичной архитектуре Cleave.js отвечает за:

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

Валидация же переносится на внешний слой, где проверяются:

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

Это разделение ответственности позволяет сохранить лёгкость Cleave.js и одновременно обеспечить строгую проверку данных.


Особенности работы с нестандартными кодами и региональными исключениями

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

Подобные сценарии включают:

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

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


Поведение при удалении и редактировании кода страны

Удаление международного префикса влияет на внутреннее состояние форматирования. При стирании + или кода страны Cleave.js пересчитывает структуру номера и возвращает его к локальному виду.

При редактировании возможны следующие сценарии:

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

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


Поведение в связке с пользовательскими масками

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

В случаях конфликтов:

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

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