Хук onUnMask используется в процессе извлечения
«чистого» значения из поля ввода, на которое наложена маска. Его задача
— вмешиваться в момент преобразования отображаемого пользователю
значения (masked value) в внутреннее или передаваемое дальше значение
(unmasked value).
Ключевая особенность заключается в том, что Inputmask разделяет два состояния данных:
onUnMask позволяет контролировать процесс перехода между
этими состояниями.
Внутренний поток обработки данных при извлечении значения выглядит упрощённо следующим образом:
onUnMaskВажно понимать, что onUnMask не влияет на отображение
ввода. Он срабатывает только в момент получения значения через API или
внутренние механизмы библиотеки.
Типичная сигнатура обработчика:
onUnMask: function (maskedValue, unmaskedValue) {
return transformedValue;
}
Параметры:
Inputmask({
mask: "9999-9999",
onUnMask: function (maskedValue, unmaskedValue) {
return unmaskedValue;
}
}).mask("#phone");
В данном случае onUnMask фактически не изменяет
поведение, а лишь явно возвращает уже обработанное значение.
Одно из ключевых применений — дополнительная нормализация данных перед отправкой на сервер.
Inputmask({
mask: "999999",
onUnMask: function (maskedValue, unmaskedValue) {
return unmaskedValue.replace(/^0+/, "");
}
}).mask("#code");
Здесь происходит дополнительная обработка после стандартного удаления маски.
Inputmask({
mask: "999.999",
onUnMask: function (maskedValue, unmaskedValue) {
return Number(unmaskedValue);
}
}).mask("#amount");
Такой подход позволяет сразу возвращать числовое значение вместо строки, что удобно для вычислений.
При работе с разделителями (десятичные, телефонные форматы, даты)
onUnMask часто используется для унификации данных.
Inputmask({
mask: "99/99/9999",
onUnMask: function (maskedValue, unmaskedValue) {
const parts = unmaskedValue.split("/");
return `${parts[2]}-${parts[1]}-${parts[0]}`;
}
}).mask("#date");
В этом примере дата преобразуется из формата DD/MM/YYYY
в YYYY-MM-DD.
Inputmask предоставляет несколько способов получения значения:
input.value — отображаемое значение с маскойgetMaskedValue() — значение с форматированиемgetUnmaskedValue() — очищенное значениеonUnMask — перехват и модификация процесса получения
unmasked valueКлючевое отличие onUnMask заключается в том, что он
работает как фильтр между внутренним механизмом очистки и
итоговым результатом, тогда как методы API просто возвращают
уже готовые данные.
onUnMask не реагирует на ввод символов. Он активируется
только при обращении к значению через API Inputmask или внутренние
вызовы библиотеки.
Возвращаемое значение полностью заменяет стандартный результат:
onUnMask: function (maskedValue, unmaskedValue) {
return "fixed-value";
}
В этом случае независимо от ввода всегда будет возвращаться одно и то же значение.
Поведение unmaskedValue зависит от параметров маски:
removeMaskOnSubmitautoUnmaskclearMaskOnLostFocusonUnMask выполняется уже после базовой обработки этих
опций.
Inputmask({
mask: "+7 (999) 999-99-99",
onUnMask: function (maskedValue, unmaskedValue) {
return unmaskedValue.replace(/\D/g, "");
}
}).mask("#phone");
Результат всегда содержит только цифры, независимо от форматирования.
Inputmask({
mask: "9999 9999 9999 9999",
onUnMask: function (maskedValue, unmaskedValue) {
return unmaskedValue.split(" ").join("");
}
}).mask("#card");
Здесь удаляются пробелы, чтобы получить стандартный формат номера карты.
Inputmask({
mask: "999-999",
onUnMask: function (maskedValue, unmaskedValue) {
if (unmaskedValue.startsWith("0")) {
return null;
}
return unmaskedValue;
}
}).mask("#serial");
Возможна реализация логики валидации прямо на этапе извлечения значения.
Перегрузка onUnMask сложной логикой приводит к тому, что
обработка данных становится непредсказуемой и трудной для отладки. В
таких случаях предпочтительнее использовать отдельный слой обработки
данных вне Inputmask.
unmaskedValue почти всегда строка. Попытка использовать
его как число без явного преобразования может привести к некорректным
результатам:
return unmaskedValue + 1; // строковая конкатенация
Корректный вариант:
return Number(unmaskedValue) + 1;
При преобразовании даты или сложных структур важно сохранять единый
формат на всём приложении. onUnMask не должен становиться
единственным местом бизнес-логики преобразования.
Если поле пустое или содержит только символы маски,
onUnMask может получить:
Рекомендуется явно обрабатывать такие случаи:
onUnMask: function (maskedValue, unmaskedValue) {
if (!unmaskedValue) return "";
return unmaskedValue;
}
При отправке формы значение, возвращаемое onUnMask,
становится финальным источником данных. Это означает, что сервер никогда
не увидит исходную маску, только результат обработки.
Это делает onUnMask ключевым инструментом для:
onUnMask часто используется совместно с:
onBeforeMask — преобразование входных данных перед
отображениемonBeforePaste — обработка вставляемого текстаoncomplete — реакция на завершение вводаoncleared — обработка очистки поляВ этой цепочке onUnMask занимает финальную стадию
извлечения данных.
Любая попытка выполнять асинхронные действия внутри
onUnMask приводит к потере предсказуемости результата.