Встроенная валидация

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

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


Базовая модель проверки корректности

Внутренняя валидация Inputmask опирается на несколько уровней проверки:

  • проверка соответствия символа позиции в маске;
  • проверка типов данных (цифры, буквы, алфавитные классы);
  • проверка пользовательских дефиниций (definitions);
  • проверка регулярных выражений;
  • проверка завершённости обязательных сегментов;
  • проверка дополнительных условий (optional, greedy, повторяемость).

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


Проверка по позициям маски

Маска определяет структуру ввода через шаблон, где каждый символ либо фиксирован, либо является плейсхолдером.

Пример логики:

  • 9 — цифра
  • a — буква
  • * — алфавитно-цифровой символ

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

  • соответствует ли символ правилу текущей позиции;
  • допускается ли автоподстановка или коррекция;
  • не нарушает ли символ структуру последующих позиций.

Если символ не проходит проверку, он отклоняется без изменения состояния маски.


Использование definitions в валидации

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

Пример структуры:

Inputmask({
  mask: "##-AA",
  definitions: {
    "#": {
      validator: "[0-9]",
      cardinality: 1
    },
    "A": {
      validator: "[A-F]",
      cardinality: 1
    }
  }
});

Поведение встроенного валидатора definitions

  • validator может быть строкой регулярного выражения или функцией;
  • cardinality определяет количество символов, потребляемых правилом;
  • результат проверки должен быть строго истинным для принятия ввода.

Функциональные валидаторы позволяют внедрять сложную логику:

"A": {
  validator: function (ch) {
    return ch >= "A" && ch <= "Z";
  }
}

Регулярные выражения как основа проверки

Регулярные выражения используются как один из основных инструментов встроенной валидации. Они применяются:

  • в definitions;
  • в alias-конфигурациях;
  • в масках с динамической структурой.

При обработке символа происходит тестирование:

  • текущего символа;
  • накопленного буфера;
  • допустимого диапазона следующего состояния.

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


Проверка завершённости значения

Встроенная валидация включает механизм определения полноты ввода. Он активируется, когда:

  • пользователь покидает поле;
  • вызываются события завершения;
  • выполняется явная проверка состояния.

Основные критерии завершённости:

  • все обязательные позиции заполнены;
  • отсутствуют незаполненные обязательные сегменты;
  • соблюдены условия optional блоков;
  • маска не содержит «висящих» символов.

Функция isComplete используется для определения этого состояния и возвращает логическое значение.


Обработка необязательных сегментов

Optional части маски задаются специальными конструкциями, например:

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

Валидация таких сегментов работает по принципу:

  • если сегмент не активирован — он игнорируется;
  • если активирован — проверяется полностью;
  • частично заполненные optional блоки считаются невалидными при завершении ввода.

Параметр skipOptionalPartCharacter влияет на поведение пропуска символов при проверке.


Greedy-режим и влияние на валидность

Параметр greedy управляет распределением вводимых символов по маске и влияет на проверку валидности.

  • greedy: true — маска пытается заполнить максимальное количество позиций;
  • greedy: false — допускается более гибкое распределение ввода.

В контексте валидации это приводит к различиям:

  • в greedy-режиме чаще фиксируются ошибки неполного заполнения;
  • в негриди-режиме допускается частичное соответствие при промежуточном вводе.

События как часть встроенной валидации

Система валидности тесно связана с событийной моделью.

oncomplete

Срабатывает при полном соответствии маске.

Условия:

  • все обязательные символы заполнены;
  • отсутствуют нарушения структуры;
  • значение соответствует всем definitions.

onincomplete

Активируется при потере фокуса, если:

  • маска не заполнена полностью;
  • присутствуют незаполненные обязательные позиции.

oncleared

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


Проверка валидности через API

Inputmask предоставляет программные методы проверки состояния.

isValid

Метод проверяет соответствие текущего значения маске:

  • учитывает definitions;
  • проверяет структуру;
  • анализирует optional блоки;
  • возвращает boolean результат.

Логика проверки включает нормализацию значения перед сравнением с маской.


Маски на основе регулярных выражений

Встроенная валидация поддерживает режим regex-масок:

Inputmask({
  mask: /[0-9]{3}-[a-z]{2}/
});

В этом режиме:

  • проверка происходит через сопоставление с регулярным выражением;
  • отсутствует позиционная логика символов;
  • валидность определяется матчингом всей строки.

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


Alias-валидация

Alias представляет собой предустановленный набор правил, включающий:

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

При использовании alias:

  • валидность определяется не только маской, но и набором внутренних ограничений;
  • поведение может включать дополнительные проверки (например, числовые диапазоны, форматы дат, телефонов).

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


Очистка и сброс состояния валидности

При очистке значения происходит:

  • сброс буфера ввода;
  • сброс состояния валидности;
  • активация oncleared;
  • восстановление начального состояния маски.

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


Итоговая модель проверки

Встроенная валидация Inputmask формируется как многоуровневая система, где:

  • позиционные правила определяют структуру;
  • definitions расширяют допустимые символы;
  • регулярные выражения задают гибкие ограничения;
  • optional-логика управляет неполными состояниями;
  • события фиксируют переходы между состояниями;
  • API-методы позволяют внешнюю проверку.

Совокупность этих механизмов создаёт непрерывную валидацию, при которой любое состояние поля находится под контролем правил маски в реальном времени.