Параметр autoUnmask в библиотеке Inputmask управляет
тем, в каком виде значение поля ввода возвращается из DOM-элемента и API
библиотеки: в замаскированном (форматированном) или в «чистом»
(безмасочном) виде.
Основная идея заключается в автоматическом преобразовании значения
при обращении к свойству value, а также при взаимодействии
с формами и методами получения данных.
При включённом autoUnmask библиотека изменяет
стандартную модель работы с input-значением:
Это влияет на все операции чтения значения из поля ввода, включая:
input.value.val()Inputmask({
mask: "9999-9999-9999-9999",
autoUnmask: true
}).mask("#card");
При такой настройке поле отображает ввод в формате кредитной карты:
1234-5678-9012-3456
Но фактическое значение, которое возвращается при чтении:
1234567890123456
В Inputmask существует несколько способов получить «чистое» значение:
Автоматически влияет на поведение value:
input.value
Явный метод получения необработанного значения:
Inputmask().unmaskedvalue(input);
или через экземпляр:
let im = Inputmask("9999-9999");
im.mask(input);
im.unmaskedvalue(input);
| Режим | input.value | unmaskedvalue() |
|---|---|---|
| autoUnmask: false | 1234-5678 | 12345678 |
| autoUnmask: true | 12345678 | 12345678 |
Одно из ключевых применений autoUnmask — контроль
данных, отправляемых на сервер.
<input id="phone" value="+7 (999) 123-45-67">
При отправке формы сервер получает:
+7 (999) 123-45-67
Inputmask({
mask: "+7 (999) 999-99-99",
autoUnmask: true
}).mask("#phone");
Форма отправляет:
79991234567
Ключевая особенность autoUnmask — перехват чтения
значения.
Внутри Inputmask реализуется логика, при которой:
.value возвращается очищенное значение;.value применяется обратное
форматирование.Это делает поведение поля «прозрачным» для кода, который не учитывает маску.
Inputmask часто используется совместно с jQuery, и
autoUnmask влияет на .val():
$("#phone").inputmask({
mask: "999-999-9999",
autoUnmask: true
});
console.log($("#phone").val());
Результат:
9999999999
При отключённом режиме:
999-999-9999
Если поле заполнено не полностью, autoUnmask может
возвращать:
Пример:
Inputmask({
mask: "9999-9999",
autoUnmask: true
}).mask("#code");
Ввод:
12__-____
Результат:
12
(незаполненные позиции отбрасываются)
autoUnmask работает независимо от визуальных
параметров:
placeholdershowMaskOnFocusshowMaskOnHoverМаска может отображаться полностью или частично, но возвращаемое значение всё равно будет очищено.
При динамических масках поведение становится более контекстным:
Inputmask({
mask: ["999-999", "9999-9999"],
autoUnmask: true
}).mask("#field");
В зависимости от введённых данных:
Используется для унификации хранения:
В базе сохраняется только «чистая» строка.
Когда сервер ожидает нормализованные данные, autoUnmask
снижает необходимость дополнительной очистки.
При отправке JSON:
fetch("/api", {
method: "POST",
body: JSON.stringify({
phone: document.querySelector("#phone").value
})
});
При autoUnmask: true сервер получает уже нормализованное
значение без дополнительных преобразований.
После включения autoUnmask невозможно получить
оригинальную строку с маской через value. Для этого
требуется:
autoUnmask,input.value = "12345678";
При включённом autoUnmask Inputmask может:
Некоторые библиотеки сериализации форм могут игнорировать Inputmask-логику и читать DOM напрямую. В таких случаях важно учитывать, что:
autoUnmask влияет только на доступ через
Inputmask/обёртки;autoUnmask часто используется совместно с:
removeMaskOnSubmit — дополнительная очистка при
отправке формы;clearMaskOnLostFocus — изменение отображения при потере
фокуса;nullable — управление пустыми значениями;greedy — контроль заполнения маски.Комбинация этих параметров определяет, насколько «строго» Inputmask работает с форматированием и хранением данных.
Разработчики часто предполагают, что маска сохраняется в
value. При autoUnmask: true это не так —
значение всегда очищено.
Если одновременно использовать:
autoUnmask: trueрезультат может приводить к потере данных или неожиданному обрезанию строк.
Сервер иногда ожидает форматированное значение, например:
+7 (999) 123-45-67
но получает:
79991234567
что может нарушить бизнес-логику, если формат важен.
autoUnmask можно рассматривать как переключатель уровня
представления данных:
Таким образом, библиотека переносит ответственность за форматирование с уровня данных на уровень отображения.