Синтаксис определения масок

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

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


Базовые символы маски

В стандартной конфигурации Inputmask используются предопределённые метасимволы:

  • 9 — обязательная цифра (0–9)
  • a — обязательная буква (A–Z, a–z)
  • * — обязательный алфавитно-цифровой символ
  • [ и ] — обозначение необязательных частей маски
  • {} — квантификатор повторения
  • | — альтернативные варианты маски (в некоторых режимах)

Эти символы формируют основу большинства масок.

Пример простой маски:

"99/99/9999"

Ввод строго соответствует структуре даты: две цифры, разделитель, две цифры, разделитель, четыре цифры.


Литералы и фиксированные символы

Любые символы, не являющиеся управляющими, воспринимаются как литералы. Они отображаются в поле ввода как фиксированные элементы и не подлежат редактированию.

Пример:

"+7 (999) 999-99-99"

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

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

"\\9\\9-999"

В этом случае символы 9 воспринимаются как обычные символы, а не как масочные токены.


Необязательные части маски

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

Пример:

"+7 (999) 999-99-99[ доб. 999]"

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

Вложенные необязательные блоки также допустимы:

"9{1,3}[.9{1,2}]"

Квантификаторы повторения

Фигурные скобки задают количество повторений символа или группы:

  • {n} — ровно n повторений
  • {n,m} — диапазон повторений от n до m
  • {n,} — неограниченное количество начиная с n

Пример:

"a{3}"

Строго три буквы.

"9{1,3}"

От одной до трёх цифр.

Квантификаторы могут комбинироваться с другими токенами:

"[9]{1,5}"

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

Inputmask поддерживает расширение набора символов через объект definitions. Это позволяет вводить собственные правила в дополнение к стандартным 9, a, *.

Пример расширения:

Inputmask({
  mask: "#-###",
  definitions: {
    "#": {
      validator: "[A-F0-9]",
      casing: "upper"
    }
  }
}).mask(element);

В этом случае символ # принимает значения шестнадцатеричного диапазона.

Синтаксис определения включает:

  • validator — регулярное выражение или функция проверки
  • cardinality — количество символов
  • casing — преобразование регистра

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

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

Пример:

Inputmask(/^\d{3}-\d{2}-\d{4}$/).mask(element);

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

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


Альтернативные варианты масок

Символ | используется для задания нескольких допустимых форматов в одной маске.

Пример:

"(999) 999-9999|+99 999 999 999"

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

При обработке Inputmask выбирает подходящий вариант в зависимости от вводимых данных.


Символы экранирования

Некоторые символы имеют специальное значение в синтаксисе и требуют экранирования:

  • 9, a, * — масочные токены
  • [ ] — необязательные блоки
  • {} — квантификаторы
  • | — альтернативы

Для их использования как литералов применяется обратный слеш:

"\\9\\a\\*"

Это переводит управляющие символы в режим обычного текста.


Динамические и статические части маски

Маска состоит из двух типов сегментов:

  • статические — фиксированные символы (разделители, префиксы)
  • динамические — изменяемые позиции ввода

Пример:

"+7 (999) 999-99-99"

Здесь +7, скобки и дефисы статичны, а цифры в 9 динамичны.

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


Специальные управляющие параметры внутри маски

Некоторые символы маски взаимодействуют с настройками поведения:

  • placeholder влияет на отображение незаполненных позиций
  • greedy управляет жадностью заполнения при повторяющихся шаблонах
  • keepStatic влияет на выбор варианта маски при альтернативных формах

Хотя эти параметры задаются вне строки маски, они напрямую влияют на интерпретацию синтаксиса.


Комбинирование элементов синтаксиса

Реальные маски редко состоят из одного типа конструкции. Обычно используется комбинация всех механизмов:

"+7 (999) 999-99-99[ x9999]"

Здесь присутствуют:

  • литералы (+, скобки, дефисы)
  • обязательные цифровые поля (9)
  • необязательный блок ([ x9999])
  • фиксированный текст внутри необязательной части

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