Inputmask поддерживает работу с датами через механизм масок и
специализированный alias datetime, позволяющий описывать
различные форматы ввода с учётом разделителей, порядка компонентов даты
и ограничений на допустимые значения. Основная концепция заключается в
том, что ввод пользователя структурируется по заранее заданному шаблону,
где каждая позиция соответствует определённому числовому или символьному
диапазону, а валидность формируется не только синтаксисом, но и
правилами интерпретации даты.
Работа с датами в Inputmask строится на разделении значения на логические блоки:
Каждый блок описывается через маску, которая ограничивает допустимые
символы. Например, 99 означает строго две цифры, а
[1-31] в расширенной логике alias может задавать диапазон
для дня.
Маска не только ограничивает ввод, но и формирует поведение курсора, автопереходы между сегментами и автоматическую подстановку разделителей.
Один из наиболее распространённых форматов, применяемый в европейских локалях:
99.99.9999
Логика маски:
При использовании alias datetime описание становится
более семантическим:
Inputmask("datetime", {
inputFormat: "dd.mm.yyyy"
}).mask(element);
В этом случае библиотека интерпретирует формат не как простую строку, а как структуру с правилами допустимых значений.
Особенность такого представления заключается в возможности контроля корректности диапазонов: месяц не может превышать 12, день — зависеть от месяца и года (в расширенных настройках).
Американская система записи даты отличается порядком компонентов и типом разделителя:
99/99/9999
или через alias:
Inputmask("datetime", {
inputFormat: "mm/dd/yyyy"
}).mask(element);
Ключевая особенность — неоднозначность первых двух блоков. Маска допускает любые значения от 00 до 99 на уровне синтаксиса, но логическая валидация (если включена) ограничивает:
Разделитель / фиксирован и автоматически подставляется
при вводе.
Наиболее строгий и универсальный формат:
9999-99-99
или:
Inputmask("datetime", {
inputFormat: "yyyy-mm-dd"
}).mask(element);
Этот формат часто используется в API, базах данных и серверной логике. Его преимущества:
Особенности реализации:
Alias datetime в Inputmask представляет собой надстройку
над базовыми масками, которая добавляет семантическое понимание
даты.
Основные параметры:
inputFormat — входной форматplaceholder — отображаемый шаблонseparator — символы разделения (если не фиксированы
форматом)alias — переключение логики обработкиПример:
Inputmask("datetime", {
inputFormat: "dd-mm-yyyy",
placeholder: "dd-mm-yyyy"
}).mask(element);
Внутренне происходит разбиение строки формата на токены, каждый из которых получает собственный валидатор.
Разделитель — ключевой элемент восприятия даты. Он влияет не только на визуальную структуру, но и на поведение ввода.
Часто используемые варианты:
./-Inputmask трактует разделитель как фиксированный символ, который:
Пример вариативной настройки:
Inputmask("datetime", {
inputFormat: "dd.mm.yyyy",
separator: "."
}).mask(element);
Хотя базовая маска ограничивает только формат, расширенные настройки позволяют контролировать семантику даты.
Основные ограничения:
Пример логической конфигурации:
Inputmask("datetime", {
inputFormat: "dd/mm/yyyy",
min: "01/01/1900",
max: "31/12/2099"
}).mask(element);
В таких сценариях маска начинает работать как гибрид форматтера и валидатора.
В процессе ввода дата редко формируется сразу. Inputmask использует промежуточные состояния:
3_)12/0_)202_)Для управления поведением применяются параметры:
clearIncomplete — очистка незавершённых значенийshowMaskOnHover — отображение шаблона при
наведенииshowMaskOnFocus — отображение при фокусеПример:
Inputmask("datetime", {
inputFormat: "yyyy-mm-dd",
clearIncomplete: true
}).mask(element);
При включённой очистке незавершённая дата не сохраняется в поле.
Разные регионы используют разные порядки компонентов даты. Маска должна учитывать:
Inputmask позволяет легко перестраивать формат без изменения логики:
Inputmask("datetime", {
inputFormat: "yyyy/mm/dd"
}).mask(element);
или:
Inputmask("datetime", {
inputFormat: "yy-mm-dd"
}).mask(element);
Использование двухзначного года требует дополнительной логики
интерпретации, так как значение 24 может означать 1924 или
2024 в зависимости от контекста.
Формат dd/mm/yy часто применяется в компактных
интерфейсах:
99/99/99
Особенности:
Пример:
Inputmask("datetime", {
inputFormat: "dd/mm/yy",
placeholder: "dd/mm/yy"
}).mask(element);
При интеграции с серверной логикой обычно выполняется преобразование в четырёхзначный год на стороне приложения.
Помимо alias, возможна ручная сборка маски:
99-99-9999
или с более строгими правилами:
Inputmask({
mask: "99-99-9999",
placeholder: "dd-mm-yyyy"
}).mask(element);
Такой подход используется при необходимости полного контроля без автоматической логики datetime.
При вставке строки Inputmask пытается:
Например, строка 2026-5-9 может быть преобразована в
2026-05-09 при включённой нормализации.
Автозаполнение работает по принципу:
Пустое значение интерпретируется как отсутствие даты. Однако поведение зависит от конфигурации:
clearMaskOnLostFocus — очистка при потере фокусаnullable — разрешение пустого состоянияgreedy — контроль полноты заполненияПример:
Inputmask("datetime", {
inputFormat: "dd.mm.yyyy",
nullable: true
}).mask(element);
Маска даты часто используется совместно с внешней проверкой:
Inputmask отвечает за формат, внешняя логика — за смысл.
Такое разделение позволяет избежать перегрузки маски сложными правилами и сохраняет предсказуемость ввода.
В реальных приложениях чаще всего встречаются следующие конфигурации:
dd/mm/yyyy — европейская локализацияmm/dd/yyyy — американская локализацияyyyy-mm-dd — системный и API-форматdd.mm.yyyy — локальные интерфейсы с точкойКаждый из них в Inputmask реализуется либо через alias
datetime, либо через прямое описание маски, что позволяет
гибко адаптировать ввод под требования интерфейса и серверной
логики.