Работа с датами в Inputmask строится вокруг поведения алиаса
datetime, который позволяет задавать формат ввода и
контролировать допустимые значения. Ограничение диапазона дат
используется для предотвращения ввода значений вне бизнес-логики
приложения: будущих дат там, где они недопустимы, или слишком старых дат
в системах учёта.
Механизм ограничения диапазона реализуется не только на уровне проверки готового значения, но и в процессе ввода, когда Inputmask блокирует недопустимые комбинации символов.
Основой служит алиас datetime, который определяет формат
и правила ввода:
Inputmask({
alias: "datetime",
inputFormat: "dd.mm.yyyy"
}).mask("#date");
Формат определяет структуру строки, но не ограничивает диапазон значений. Пользователь может ввести любую дату, соответствующую шаблону, включая некорректные с точки зрения бизнес-логики.
Для задания допустимого диапазона используются параметры
min и max. Они определяют нижнюю и верхнюю
границу допустимых значений.
Inputmask({
alias: "datetime",
inputFormat: "dd.mm.yyyy",
min: "01.01.2000",
max: "31.12.2030"
}).mask("#date");
В этом случае:
Inputmask не всегда запрещает ввод символов мгновенно. Вместо этого используется комбинация механизмов:
Например, при max: 31.12.2030:
Формат inputFormat влияет на интерпретацию
min и max. Одна и та же дата может быть
интерпретирована по-разному в зависимости от порядка компонентов.
dd.mm.yyyyInputmask({
alias: "datetime",
inputFormat: "dd.mm.yyyy",
min: "01.02.2020",
max: "31.10.2025"
}).mask("#date");
mm/dd/yyyyInputmask({
alias: "datetime",
inputFormat: "mm/dd/yyyy",
min: "02/01/2020",
max: "10/31/2025"
}).mask("#date");
Ошибки в согласовании формата и значений диапазона приводят к некорректной валидации, так как парсер интерпретирует строки строго по шаблону.
В более строгих конфигурациях допускается использование объектов
Date вместо строк. Это снижает риск ошибок интерпретации
формата.
Inputmask({
alias: "datetime",
inputFormat: "yyyy-mm-dd",
min: new Date(2020, 0, 1),
max: new Date(2030, 11, 31)
}).mask("#date");
Особенность JavaScript Date:
В некоторых сценариях требуется ограничить только одну границу:
Inputmask({
alias: "datetime",
inputFormat: "dd.mm.yyyy",
min: "01.01.2020"
}).mask("#date");
Inputmask({
alias: "datetime",
inputFormat: "dd.mm.yyyy",
max: "31.12.2025"
}).mask("#date");
Отсутствие одной из границ означает отсутствие соответствующего ограничения, и Inputmask допускает ввод в бесконечную сторону диапазона.
Внутренняя логика Inputmask учитывает структуру даты и может ограничивать ввод на уровне отдельных сегментов:
При наличии min и max диапазоны становятся
динамическими.
Например:
min: "15.03.2022",
max: "10.06.2022"
В этом случае:
При вставке строки Inputmask выполняет полную проверку:
Inputmask({
alias: "datetime",
inputFormat: "dd.mm.yyyy",
min: "01.01.2020",
max: "31.12.2030"
}).mask("#date");
Если вставляется значение:
15.07.2035
то возможны сценарии:
Поведение зависит от настроек обработки вставки и версии Inputmask.
yearrange
на диапазоныПараметр yearrange ограничивает не сами значения, а
поведение выбора года в процессе ввода:
Inputmask({
alias: "datetime",
inputFormat: "dd.mm.yyyy",
yearrange: { minyear: 1990, maxyear: 2030 }
}).mask("#date");
Отличие:
min/max — строгая валидация значений;yearrange — ограничение допустимого диапазона годов при
вводе.Inputmask способен автоматически корректировать ввод в пределах допустимого диапазона:
Inputmask({
alias: "datetime",
inputFormat: "dd.mm.yyyy",
min: "01.01.2020",
max: "31.12.2030",
autoUnmask: true
}).mask("#date");
При вводе некорректных значений поведение может включать:
При использовании локализованных форматов важно учитывать:
., /, -);Ошибочное сочетание приводит к тому, что диапазон применяется к неверным частям строки, что визуально выглядит как «сломанная» валидация.
Неправильная настройка чаще всего связана с:
min/max;inputFormat;min > max.Пример некорректной конфигурации:
min: "31.12.2030",
max: "01.01.2020"
В таких случаях поведение становится неопределённым: Inputmask может игнорировать ограничения или частично их применять.
Во время ввода значение часто является неполным:
12.0_.____
Inputmask оценивает диапазон только тогда, когда:
До этого момента проверка носит прогнозный характер, ограничивая только невозможные комбинации.
Крайние значения диапазона обрабатываются как допустимые при полном совпадении:
min, разрешена;max, разрешена;Это важно учитывать при бизнес-логике, связанной с включающими интервалами (inclusive ranges).
Диапазон может изменяться во время работы страницы:
let im = Inputmask({
alias: "datetime",
inputFormat: "dd.mm.yyyy",
min: "01.01.2020",
max: "31.12.2025"
}).mask("#date");
// позже
im.option({
min: "01.01.2022",
max: "31.12.2030"
});
При обновлении: