Функция isValid в библиотеке Inputmask предназначена для
проверки соответствия строки или текущего значения маске ввода с точки
зрения полноты и корректности заполнения. Она выполняет строгую
валидацию на основе правил маски, учитывая обязательные и необязательные
сегменты, литералы, алиасы, а также конфигурацию опций, влияющих на
интерпретацию значения.
Внутренняя модель Inputmask разделяет процесс обработки ввода на
несколько этапов: форматирование, маскирование, обновление буфера и
валидацию. isValid относится к финальному уровню проверки,
когда необходимо определить, соответствует ли текущее значение всем
ограничениям маски.
Ключевая особенность заключается в том, что проверка выполняется не по регулярному выражению в классическом смысле, а через анализ структуры маски, где каждый символ может представлять:
В зависимости от контекста использования Inputmask, функция
isValid может вызываться как метод экземпляра маски или как
часть статического API:
isValid(value: string, options?: Object): boolean
или через экземпляр:
inputmask.isValid()
Во втором варианте проверяется текущее значение, связанное с DOM-элементом.
Дополнительные параметры позволяют переопределять поведение проверки:
value — строка для проверки вне контекста
input-элементаoptions — конфигурация, влияющая на правила
интерпретации (например, greedy, definitions, alias)Алгоритм isValid можно разложить на несколько
этапов:
Перед началом проверки значение очищается от:
removeMaskOnSubmit)На этом этапе Inputmask приводит строку к внутреннему представлению, пригодному для сопоставления с шаблоном.
Маска преобразуется в последовательность токенов:
-, /,
.)9 — цифра, a —
буква, * — любой символ)Каждый токен получает набор ограничений:
{ type: "numeric", required: true }
{ type: "literal", value: "-" }
{ type: "alpha", optional: true }
Строка проходит сравнение с маской слева направо. Для каждого символа выполняется проверка:
Особенно сложным является обработка повторяющихся сегментов, например:
(999) 999-9999
или динамических масок:
aa[-999]
Даже если строка структурно соответствует маске, проверяется заполненность обязательных сегментов. Например:
required поля → invalidПри greedy: true маска стремится захватить максимальное
количество символов. Это влияет на isValid, так как
проверка учитывает максимально возможное развертывание маски.
Если включён autoUnmask, значение может быть
преобразовано в «чистый» вид перед проверкой, что изменяет
результат:
"123-45" может считаться валидным в masked режимеПользовательские определения влияют напрямую на результат:
Inputmask.extendDefinitions({
"X": {
validator: "[A-F0-9]",
cardinality: 1
}
});
В этом случае isValid учитывает кастомные правила,
расширяя стандартный набор токенов.
Маска:
Inputmask("(999) 999-9999");
Проверка:
(123) 456-7890 → true(123) 45_-7890 → false(12) 345-67890 → falseПричина отказа в последнем случае — несоответствие структуре сегментов и нарушенная группировка.
Маска:
Inputmask("99/99/9999");
12/08/2025 → true12/8/2025 → false (нарушение фиксированной длины
сегмента)12/08/20_5 → false (наличие незаполненного
символа)Inputmask({
mask: ["99-99", "999-999"]
});
Значение считается валидным, если полностью соответствует одной из
альтернативных структур. isValid выполняет проверку по всем
вариантам и возвращает true, если хотя бы одна ветка
проходит полностью.
Особенность Inputmask заключается в различии между частично корректным вводом и полностью валидным значением.
| Состояние | Описание |
|---|---|
| partial | структура допустима, но не заполнена |
| complete | полностью соответствует маске |
| invalid | нарушена структура или тип |
isValid ориентируется именно на состояние
complete. Это означает, что частично заполненные значения
почти всегда дают false.
Placeholder символы (_ по умолчанию) не считаются
допустимыми значениями. При проверке:
Это важно при использовании кастомных placeholder-символов:
Inputmask("999-999", { placeholder: " " });
Даже пробелы могут интерпретироваться как незаполненные позиции.
isValid отличается от:
isComplete — проверяет только завершённость вводаisMaskedValue — определяет, применена ли маскаpattern, type) — не
учитывает структуру маскиГлавное отличие заключается в том, что isValid
анализирует не строку, а модель маски, что делает проверку более
глубокой и контекстной.
Если передаётся значение, не связанное с экземпляром Inputmask, результат может быть некорректным из-за отсутствия контекста definitions.
При использовании массива масок часто предполагается проверка только первой ветки, что приводит к ложным отрицательным результатам.
Переопределение стандартных символов (9, a,
*) без учёта cardinality может нарушить логику
isValid.
При использовании алиасов (datetime,
numeric, email) проверка переходит от
статической маски к специализированным валидаторам. В этом режиме:
isValid учитывает внутренние парсеры алиасаПример:
Inputmask("datetime", {
inputFormat: "dd/mm/yyyy"
});
Значение считается валидным только при соответствии календарной логике, а не только формату символов.
Алгоритм isValid имеет линейную сложность относительно
длины строки, но может усложняться при:
В типичных сценариях проверка выполняется мгновенно, но при больших наборах правил может требовать оптимизации конфигурации.