Группировка и альтернативы

Группировка в масках Inputmask строится вокруг идеи логического объединения символов в единый атом ввода, который можно повторять, делать опциональным или комбинировать с альтернативными вариантами. Базовый механизм опирается на скобочные выражения, квантификаторы и внутренние правила разбора шаблона, где каждая группа рассматривается как самостоятельный блок синхронизации курсора и валидации.

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

(999) 999-9999

В данном случае (999) не является регулярным выражением, но воспринимается как единый блок, обеспечивающий согласованное поведение ввода: курсор перемещается внутри группы до её завершения, после чего переходит к следующему сегменту.

Группировка влияет на:

  • порядок заполнения символов;
  • поведение удаления (backspace);
  • позиционирование курсора;
  • применение квантификаторов к целому блоку.

Повторяемые группы и квантификаторы

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

(999){2}

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

Расширенный вариант:

(aa-999){3}

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

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

Опциональные группы

Опциональность в Inputmask реализуется через специальные конструкции, позволяющие группе существовать в двух состояниях: активном и пропущенном. В простейшем случае:

(999)?999

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

Опциональные группы влияют на:

  • динамическое сокращение маски при вводе;
  • автоматическое перескакивание курсора;
  • поведение при частичном вводе и очистке.

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

Альтернативы и alternator-логика

Механизм альтернатив в Inputmask реализуется через разделение возможных шаблонов внутри одной маски. Это позволяет одному полю поддерживать несколько форматов ввода.

Классический вариант:

(999-999|9999-9999)

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

Альтернативы используются для:

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

Более сложная структура:

(99-999|AAA-999|999999)

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

Вложенные группы

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

(+9(999)999-99-99)

Здесь внешний блок определяет международный код, а внутренняя группа (999) отделяет код оператора. Вложенность влияет на синхронизацию курсора: переход внутри вложенной группы не нарушает целостность внешней структуры.

Вложенные группы особенно полезны при построении:

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

Комбинация группировки с пользовательскими определениями

Inputmask позволяет совмещать группировку с кастомными символами, определёнными через definitions. Это создаёт гибридные структуры:

(aa-999){2}

где a может быть переопределён как любой набор символов, например кириллица или ограниченный алфавит.

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

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

Группировка напрямую влияет на алгоритм позиционирования курсора. Основные правила:

  • курсор не выходит за пределы активной группы до её заполнения;
  • при удалении символов группа может «схлопываться»;
  • переход между группами осуществляется только через валидный разделитель;
  • альтернативные группы пересчитываются при каждом изменении ввода.

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

Подводные особенности работы групп

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

Жадность заполнения групп Некоторые группы стремятся заполняться полностью до перехода к следующему сегменту, что влияет на UX при вводе переменной длины.

Конфликт альтернатив Если альтернативные ветки пересекаются по шаблону (например, 999 и 99-9), Inputmask может переключать ветку в процессе ввода, что приводит к «перепрыгиванию» формата.

Стабильность при удалении Удаление символов внутри группы может привести к перерасчёту всей структуры маски, особенно при вложенных и альтернативных блоках.

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

Комплексные структуры с группировкой и альтернативами

Наиболее сложные маски объединяют все механизмы:

(+7|8)(999){2,3}-(aaa|999)-99

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

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

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

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