Санитизация входных данных в контексте Inputmask строится не как единоразовая очистка строки, а как непрерывный процесс преобразования пользовательского ввода в структурированное, предсказуемое представление. Маска здесь выступает не только шаблоном отображения, но и механизмом ограничения допустимого множества символов, порядка их появления и правил трансформации.
Библиотека Inputmask реализует санитарную обработку данных через несколько слоёв:
Ключевой принцип заключается в том, что недопустимые символы не просто удаляются постфактум, а предотвращаются на этапе ввода.
Маска определяет допустимые символы через шаблон и специальные токены:
9 — цифраa — буква* — буква или цифраНапример:
Inputmask("999-999").mask(input);
В этом случае любые символы, не являющиеся цифрами, не проходят в итоговое значение. Санитизация здесь реализуется как жёсткое ограничение входного алфавита.
Механизм definitions позволяет переопределить правила
допустимых символов, расширяя модель санитизации до произвольной
логики.
Inputmask({
mask: "****-****",
definitions: {
"*": {
validator: "[A-F0-9]",
casing: "upper"
}
}
}).mask(input);
Здесь санитизация включает:
Санитизация часто начинается до применения маски. Хук
onBeforeMask позволяет нормализовать входную строку до
обработки.
Inputmask({
mask: "+7 (999) 999-99-99",
onBeforeMask: function (value) {
return value.replace(/\D/g, "");
}
}).mask(input);
Здесь реализуется предварительная очистка:
Подобный подход используется для обработки внешних данных: вставки из буфера обмена, автозаполнения, загрузки сохранённых значений.
Вставка данных является одним из основных источников «грязного» ввода. Inputmask предоставляет отдельный слой санитизации:
Inputmask({
mask: "9999 9999 9999 9999",
onBeforePaste: function (pastedValue) {
return pastedValue.replace(/\s|\D/g, "");
}
}).mask(input);
Санитизация при вставке включает:
Это предотвращает попадание в систему данных, не соответствующих ожидаемому формату.
На этапе записи значения в поле применяется дополнительная фильтрация:
Inputmask({
mask: "999-99-9999",
onBeforeWrite: function (event, buffer, caretPos, opts) {
return {
refreshFromBuffer: true,
buffer: buffer
};
}
}).mask(input);
Хотя основная цель этого хука — управление поведением курсора и буфера, он также используется для:
Санитизация не ограничивается вводом. Важный аспект — получение данных без форматирования:
input.inputmask.unmaskedvalue();
Этот метод возвращает значение:
Например, из +7 (999) 123-45-67 возвращается
79991234567.
Таким образом Inputmask разделяет:
Опция removeMaskOnSubmit влияет на итоговую сериализацию
формы:
Inputmask({
mask: "+9 (999) 999-99-99",
removeMaskOnSubmit: true
}).mask(input);
При отправке формы:
Санитизация включает обработку неполных данных. Параметр
skipOptionalPartCharacter управляет тем, как обрабатываются
незаполненные сегменты:
Inputmask({
mask: "(999) 999-9999",
skipOptionalPartCharacter: " "
}).mask(input);
Это позволяет:
Regex-маски усиливают контроль над допустимыми значениями:
Inputmask({
mask: new RegExp("[0-9A-Z]{6,10}")
}).mask(input);
В этом режиме:
Алиасы предоставляют готовые стратегии нормализации:
Inputmask("email").mask(input);
или
Inputmask("decimal").mask(input);
Внутри алиасов уже заложены правила:
Это стандартизирует санитизацию для распространённых типов данных.
Параметр greedy влияет на поведение заполнения:
Inputmask({
mask: "999-999",
greedy: false
}).mask(input);
В связке с placeholder это влияет на:
С точки зрения архитектуры Inputmask формирует цепочку обработки:
onBeforeMask)onBeforePaste)onBeforeWrite)unmaskedvalue)removeMaskOnSubmit)Каждый этап устраняет отдельный класс «грязных» данных.
Несмотря на широкие возможности Inputmask, клиентская санитизация не является абсолютной гарантией корректности данных:
Поэтому Inputmask рассматривается как слой предварительной нормализации, а не как механизм безопасности.
В типовой архитектуре данные проходят двойную обработку:
Такое разделение снижает вероятность:
Inputmask различает:
Санитизация в этом контексте включает:
clearIncomplete);Inputmask({
mask: "999-999",
clearIncomplete: true
}).mask(input);
Санитизация в Inputmask — это не операция удаления символов, а система управления состоянием строки, где каждое преобразование контролируется маской, правилами и хуками. В результате формируется предсказуемый поток данных, в котором: