Встроенные символы-определители

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

Маска в Inputmask представляет собой строку, где каждый символ либо является литералом (фиксированным знаком), либо специальным определителем. При вводе данных библиотека сопоставляет вводимые символы с этими определителями и принимает или отклоняет ввод в зависимости от соответствия.

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


Цифровой определитель 9

Символ 9 используется для обозначения обязательной позиции, допускающей только цифры от 0 до 9.

Поведение:

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

Пример маски:

Inputmask("9999").mask("input");

Такой шаблон ограничивает ввод четырьмя цифрами.

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

  • PIN-коды
  • фиксированные числовые идентификаторы
  • простые числовые поля без форматирования

При вводе значения 12a4 третий символ будет отклонён, так как не соответствует числовому диапазону.


Буквенный определитель a

Символ a задаёт позицию, принимающую только буквенные символы латинского или локализованного алфавита (в зависимости от конфигурации и расширений).

Поведение:

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

Пример:

Inputmask("aaaa").mask("input");

Используется для:

  • кодов стран (например, ISO)
  • коротких текстовых идентификаторов
  • фиксированных буквенных полей

Ввод AB12 приведёт к тому, что символы 1 и 2 будут отклонены.


Универсальный определитель *

Символ * представляет наиболее гибкое правило. Он допускает ввод практически любого символа.

Поведение:

  • принимает буквы
  • принимает цифры
  • может принимать специальные символы (в зависимости от конфигурации)

Пример:

Inputmask("****").mask("input");

Применение:

  • свободные коды
  • временные токены
  • идентификаторы, допускающие смешанный формат

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


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

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

Пример:

Inputmask("99-99").mask("input");

Здесь дефис - не интерпретируется как правило, а фиксируется в структуре строки.

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

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

Экранирование специальных символов

Если необходимо использовать символ, который совпадает с определителем, применяется экранирование обратным слешем \.

Пример:

Inputmask("\\9\\9").mask("input");

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

Сценарии применения:

  • отображение фиксированных шаблонных префиксов
  • включение служебных символов в маску
  • предотвращение интерпретации управляющих токенов

Опциональность через символ ?

Символ ? управляет необязательностью предыдущего элемента маски. Он не создаёт самостоятельную позицию, а изменяет поведение предшествующего токена.

Пример:

Inputmask("(99)?").mask("input");

Поведение:

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

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

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

Повторяемость и структурные группы

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

Пример:

Inputmask("9{3}-9{2}-9{4}").mask("input");

Здесь:

  • 9{3} означает три цифры подряд
  • 9{2} — две цифры
  • 9{4} — четыре цифры

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


Взаимодействие символов внутри одной маски

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

Пример:

Inputmask("aa-9999-*").mask("input");

Логика:

  • aa — буквенный префикс
  • 9999 — числовой блок
  • * — завершающий свободный символ

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


Приоритеты интерпретации символов

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

  1. Экранированные символы (\)
  2. Встроенные определители (9, a, *)
  3. Управляющие символы (?, {n})
  4. Литералы

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


Пользовательские расширения встроенных символов

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

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

Inputmask.extendDefinitions({
  '#': {
    validator: "[A-F0-9]",
    cardinality: 1
  }
});

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


Совместимость встроенных символов с режимами ввода

Поведение встроенных определителей может изменяться в зависимости от режима работы Inputmask:

  • режим вставки символов
  • режим перезаписи
  • динамическая маска

Например, в режиме перезаписи (overwrite) символ 9 не только ограничивает ввод цифрами, но и определяет логику замещения существующего значения.


Поведение при неполном вводе

Если маска содержит обязательные определители (9, a), а ввод не завершён, Inputmask сохраняет структуру, но помечает значение как незавершённое.

Пример:

Inputmask("9999").mask("input");

При вводе 12 маска остаётся активной, ожидая заполнения оставшихся позиций.


Ограничения встроенных символов

Несмотря на универсальность, встроенные определители имеют ряд ограничений:

  • не поддерживают сложную валидацию без расширений
  • не различают контекст ввода (например, диапазоны чисел)
  • работают только на уровне символа, а не семантики

Для более сложных сценариев требуется комбинирование с пользовательскими валидаторами или расширениями definitions.


Комбинирование с форматирующими символами

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

Пример:

Inputmask("+7 (999) 999-99-99").mask("input");

Здесь:

  • 9 определяет цифровые позиции
  • скобки, пробелы и дефисы задают визуальную структуру
  • плюс и цифра 7 являются фиксированным префиксом

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


Роль встроенных символов в архитектуре Inputmask

Встроенные определители являются фундаментом всей системы масок. Они определяют:

  • допустимые классы символов
  • структуру ввода
  • поведение при редактировании
  • основу для расширений и кастомизации

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