Необязательные части маски в Inputmask представляют собой механизм условного включения сегментов шаблона, которые могут присутствовать в вводе, но не являются обязательными для валидного соответствия. Это позволяет создавать гибкие шаблоны, адаптирующиеся к различным форматам данных без необходимости описывать отдельные маски для каждого варианта.
В библиотеке Inputmask наиболее распространённый способ задания необязательных сегментов — использование квадратных скобок:
[ ... ]
Содержимое внутри таких скобок рассматривается как необязательная часть маски и может быть полностью пропущено при вводе.
Inputmask("9999[99]").mask(element);
В данном случае допустимы два варианта ввода:
1234123456Последние две позиции (99) могут присутствовать, но не
обязательны.
Такой подход часто применяется для расширений форматов, где базовая структура фиксирована, а дополнительная часть используется редко.
Квадратные скобки могут включать не только плейсхолдеры, но и фиксированные символы:
Inputmask("9999[ -9999]").mask(element);
Допустимые варианты:
12341234 -5678В данном случае пробел, дефис и дополнительные цифры становятся опциональной группой. Это удобно для форматов, где дополнительная часть визуально отделяется, но не всегда используется.
Круглые скобки используются для логической группировки, а квадратные скобки — для обозначения опциональности всей группы:
Inputmask("(999) 999[ -9999]").mask(element);
Разбор поведения:
(999) 999 — обязательная часть[ -9999] — необязательное расширение номераДопустимые значения:
(123) 456(123) 456 -7890Такой подход применяется в телефонных масках с расширениями или внутренними добавочными номерами.
Inputmask допускает комбинирование групп и опциональных сегментов:
Inputmask("(999) 999[-9999[ ext 9999]]").mask(element);
Здесь структура имеет уровни:
(999) 999-9999ext 9999Возможные варианты ввода:
(123) 456(123) 456-7890(123) 456-7890 ext 1234Такая модель полезна для описания расширяемых идентификаторов, где дополнительные части зависят друг от друга.
Опциональные части часто комбинируются с квантификаторами:
Inputmask("9999[9{1,3}]").mask(element);
Интерпретация:
9999 — фиксированная часть[9{1,3}] — необязательный блок, содержащий от 1 до 3
цифрДопустимые вводы:
1234123451234567Такой подход применяется для расширяемых кодов, где длина дополнительного сегмента варьируется.
При использовании алиасов (например, datetime,
email, numeric) необязательные сегменты часто
встроены в предопределённую структуру:
Inputmask({
alias: "email",
greedy: false
}).mask(element);
Хотя алиас email уже содержит сложную структуру,
дополнительные необязательные правила могут применяться через
пользовательские маски поверх базового поведения.
Пример расширения:
Inputmask("email[.test]").mask(element);
Здесь доменная зона .test становится необязательной
добавкой, допустимой только при наличии базового email.
Параметр greedy влияет на то, как Inputmask распределяет
ввод между обязательными и необязательными частями.
Inputmask("9999[99]", { greedy: false }).mask(element);
Поведение:
greedy: true маска стремится заполнить
необязательную часть сразу при наличии данныхgreedy: false необязательные сегменты активируются
только при явном вводе дополнительных символовЭто особенно заметно при автозаполнении и вставке текста.
В числовых форматах опциональные части часто используются для дробной части:
Inputmask("9{1,3}[.9{1,2}]").mask(element);
Разбор:
9{1,3} — обязательная целая часть (1–3 цифры)[.9{1,2}] — необязательная дробная частьВозможные значения:
71237.5123.45Такая структура используется в финансовых и измерительных данных.
Маски даты часто используют опциональные временные компоненты:
Inputmask("99/99/9999[ 99:99]").mask(element);
Интерпретация:
99/99/9999 — дата (обязательная часть)[ 99:99] — время (необязательная часть)Допустимые варианты:
12/05/202612/05/2026 14:30Такая модель позволяет использовать единое поле для даты и даты-времени.
Часто опциональность применяется для расширений кодов:
Inputmask("AAA-999[9]").mask(element);
Разбор:
AAA — три буквы999 — обязательные цифры[9] — дополнительная необязательная цифраДопустимые значения:
ABC-123ABC-1234Это характерно для артикулов, серийных номеров и внутренних идентификаторов.
Опциональные сегменты влияют на поведение каретки и очистки:
Особенно важно поведение при backspace: удаление последнего символа обязательной части может привести к автоматическому удалению всего необязательного хвоста.
При неправильном проектировании маски возможны неоднозначности:
Inputmask("999[9]-999").mask(element);
Проблема заключается в том, что дефис может восприниматься как часть опционального блока или как разделитель фиксированной структуры.
Более устойчивый вариант:
Inputmask("999[9][-999]").mask(element);
или
Inputmask("9999[-999]").mask(element);
Выбор зависит от того, является ли расширение частью логической группы или отдельным сегментом.
Маска может содержать несколько независимых опциональных блоков:
Inputmask("9999[99]-AAA[ 9999]").mask(element);
Разбор:
9999 — обязательный числовой блок[99] — дополнительное расширение-AAA — обязательный буквенный сегмент[ 9999] — дополнительный числовой суффиксДопустимые комбинации:
1234-ABC123456-ABC1234-ABC 7890При построении масок с опциональными сегментами ключевым становится разделение структуры на уровни:
Такая модель позволяет избегать избыточного количества отдельных масок и поддерживать единый шаблон для вариативных данных.
При вставке значений Inputmask анализирует:
Если вставляемое значение превышает базовую длину, оно автоматически распределяется в необязательные сегменты. Если не достигает минимальной длины, опциональные блоки игнорируются.
Несмотря на гибкость, опциональные сегменты имеют ограничения:
Нарушение этих правил приводит к нестабильному поведению маски при редактировании и вставке данных.