В библиотеке Inputmask проверка полноты введённого значения опирается
на строгое соответствие текущего состояния поля заданной маске. Механизм
isComplete используется для определения того, заполнены ли
все обязательные позиции маски корректными символами и не остались ли
незаполненные обязательные элементы или незавершённые блоки ввода.
Состояние «полностью заполнено» в Inputmask не сводится к простой проверке длины строки. Маска может содержать:
9, a,
*){} квантификаторы)Поэтому isComplete работает не как строковая валидация,
а как анализ состояния внутреннего буфера маски.
Основное правило: значение считается полным только тогда, когда каждая обязательная позиция маски заполнена допустимым символом.
Метод isComplete вызывается у экземпляра маски:
const mask = new Inputmask("99-99-9999").mask(input);
const result = mask.isComplete();
Возвращаемое значение:
true — все обязательные позиции заполненыfalse — есть хотя бы один незаполненный или
некорректный слотВажно, что isComplete не проверяет бизнес-валидность
(например, допустимость даты), а только структурную завершённость.
Внутренне Inputmask оперирует несколькими уровнями проверки:
isComplete является более узким понятием, чем
isValid.
Пример различия:
const mask = new Inputmask("99/99");
input.value = "12/3_";
mask.isComplete(); // false
mask.isValid(); // может быть false или true в зависимости от режима
Даже если часть символов допустима, незаполненный слот делает значение неполным.
Inputmask хранит внутреннее представление введённых данных в виде
буфера, где каждая позиция соответствует элементу маски. При вызове
isComplete происходит обход этого буфера.
Упрощённая логика выглядит следующим образом:
Получить текущие значения всех позиций маски
Проверить каждую позицию:
Если найден хотя бы один незаполненный обязательный слот →
вернуть false
Иначе вернуть true
Особенность заключается в том, что символы заполнения
(_, placeholder) не считаются валидными значениями.
Placeholder в Inputmask используется только как визуальный индикатор.
Он не влияет на результат isComplete.
Пример:
const mask = new Inputmask("99-99");
input.value = "12-_3";
mask.isComplete(); // false
Даже если визуально поле выглядит почти заполненным, наличие placeholder символа в обязательной позиции делает значение незавершённым.
Маски с необязательными блоками изменяют поведение проверки.
Пример:
(99) 999-9999
Если часть (99) является опциональной, то
isComplete может вернуть true, даже если этот
блок не заполнен, при условии что остальные обязательные части
корректны.
При этом важно учитывать параметры:
optionalmarkergreedyskipOptionalPartCharacterЭти настройки влияют на то, какие части считаются обязательными для завершённости.
При использовании повторяющихся блоков:
9{1,3}
Inputmask ожидает минимум один символ и максимум три. В этом случае:
Таким образом, isComplete зависит от минимальной границы
квантификатора, а не от максимальной.
При использовании динамических масок поведение
isComplete зависит от текущего состояния ветки маски.
Пример:
"9", "99", "999"
Если пользователь вводит данные постепенно, маска может переключаться
между состояниями. isComplete проверяет только активную
ветку, а не потенциальные варианты.
Это означает:
Хотя isComplete — это метод проверки состояния, он тесно
связан с событиями:
oncompleteonincompleteМеханизм работает следующим образом:
isComplete становится true →
триггерится oncompletefalse → триггерится
onincompleteТаким образом, isComplete является базовым критерием для
событийной модели завершённости.
В типичной реализации проверка выполняется через экземпляр маски:
const im = new Inputmask("99-99-9999").mask(input);
if (im.isComplete()) {
// значение полностью введено
}
Важно учитывать, что вызов должен производиться на актуальном экземпляре маски, иначе состояние буфера может быть не синхронизировано.
isComplete может возвращать false даже при
визуально «заполненном» поле в следующих случаях:
Особенно часто ошибка возникает при масках с несколькими уровнями вложенности.
Если поле было очищено программно:
input.value = "";
или через API:
im.setValue("");
то isComplete немедленно становится false,
так как внутренний буфер сбрасывается до пустого состояния.
При включённом autoUnmask значение может храниться без
маскировки, однако isComplete продолжает работать на основе
структуры маски, а не «сырого» значения.
Это означает:
Если маска использует регулярные выражения:
{regex: "[0-9a-z]"}
isComplete проверяет не только факт наличия символа, но
и соответствие регулярному выражению. Несоответствующий символ считается
незаполненным слотом.
isComplete применяется в сценариях, где требуется
строгий контроль завершённости ввода:
Логика проверки обычно используется перед отправкой формы или активацией кнопки подтверждения.
При программном изменении значения важно учитывать, что состояние
isComplete обновляется синхронно после обработки
input-событий. При прямом изменении value без триггера событий результат
может временно не совпадать с визуальным состоянием до пересчёта
маски.
При включённой опции удаления маски при отправке формы:
isComplete оценивается до удаления маскиСостояние isComplete формируется как результат строгой
структурной проверки:
Эта модель делает проверку детерминированной и предсказуемой даже в сложных масках с условными блоками и повторениями.