Работа с документными номерами требует строгого контроля формата ввода, поскольку такие значения почти всегда имеют фиксированную структуру: набор цифр, разделённых по смысловым группам, либо комбинации букв и цифр. В JavaScript-библиотеке Inputmask подобные задачи решаются через маски ввода, позволяющие жёстко ограничить допустимые символы, позиции и шаблоны ввода, сохраняя при этом удобство для пользователя.
Маска в Inputmask представляет собой строку или объект, описывающий допустимую структуру ввода. Для документных номеров ключевыми становятся следующие элементы:
9 — обязательная цифраa — обязательная буква* — любая буква или цифра[] — необязательные блокиДля паспортных и идентификационных данных чаще всего используется строго цифровая маска с фиксированным количеством символов и визуальным разделением.
Дополнительные параметры, влияющие на поведение:
placeholder — отображаемый шаблонshowMaskOnHover — отображение маски при наведенииclearIncomplete — очистка незавершённого вводаautoUnmask — возврат «чистого» значения без
форматированияПаспорт гражданина РФ имеет фиксированную структуру: серия и номер. Обычно формат записывается как:
XXXX XXXXXX, где
Для Inputmask это выражается следующим образом:
Inputmask("9999 999999").mask("#passport");
Такой вариант обеспечивает:
При необходимости можно усилить контроль:
Inputmask({
mask: "9999 999999",
placeholder: "____ ______",
clearIncomplete: true
}).mask("#passport");
Здесь незавершённые значения будут автоматически очищаться при потере фокуса, что полезно для форм регистрации и KYC-процессов.
Помимо паспорта РФ, Inputmask часто применяется для других документов с фиксированной структурой.
Во многих странах используется 12-значный идентификатор:
Inputmask("999999999999").mask("#iin");
При необходимости визуального разделения:
Inputmask("999 999 999 999").mask("#iin");
Нумерация заграничных паспортов может включать буквы и цифры. Например:
Inputmask("AA9999999").mask("#foreignPassport");
или более универсальный вариант:
Inputmask("**9999999").mask("#foreignPassport");
Где * допускает и буквы, и цифры, что удобно для
международных форматов.
Форматы водительских удостоверений часто варьируются, но могут быть представлены как комбинации цифр с фиксированными блоками:
Inputmask("9999-999999-99").mask("#driverLicense");
Такой подход обеспечивает:
Inputmask позволяет расширять стандартные маски через
definitions, что особенно полезно для документов с
нестандартной структурой.
Пример определения собственной маски для буквенно-цифрового символа:
Inputmask({
mask: "aa-9999-****",
definitions: {
"a": {
validator: "[A-Za-z]",
cardinality: 1
}
}
}).mask("#customDoc");
В этом примере:
a строго ограничен латинскими буквами9 — цифры* — любые символыПодобный подход позволяет адаптировать библиотеку под любые национальные или корпоративные стандарты документов.
В Inputmask можно использовать регулярные выражения, если структура документа слишком сложна для классической маски.
Пример для паспорта с дополнительной проверкой диапазона символов:
Inputmask({
mask: /^\d{4}\s?\d{6}$/,
placeholder: ""
}).mask("#passport");
Регулярные выражения дают гибкость, но теряют визуальную предсказуемость ввода. Маски предпочтительнее в интерфейсах, где важна направляющая структура.
Документы могут иметь несколько допустимых форматов в зависимости от страны или типа пользователя. В таких случаях применяется динамическая смена маски:
const maskPassportRU = "9999 999999";
const maskPassportIntl = "***********";
Inputmask({
mask: [maskPassportRU, maskPassportIntl],
keepStatic: true
}).mask("#passport");
Параметр keepStatic управляет тем, как Inputmask
переключается между вариантами.
Документные поля часто требуют строгой валидации при потере фокуса. Ключевые параметры:
Inputmask({
mask: "9999 999999",
clearIncomplete: true,
showMaskOnHover: false,
showMaskOnFocus: true
}).mask("#passport");
Поведение:
При отправке формы часто требуется получить только цифры без форматирования:
Inputmask({
mask: "9999 999999",
autoUnmask: true
}).mask("#passport");
В результате значение:
1234 567890
будет преобразовано в:
1234567890
Это критично для серверной обработки, где форматирование не должно влиять на хранение данных.
Inputmask предоставляет события, которые позволяют отслеживать состояние поля:
$("#passport").inputmask({
mask: "9999 999999"
}).on("complete", function () {
console.log("Поле заполнено полностью");
}).on("incomplete", function () {
console.log("Поле заполнено частично");
});
Основные события:
complete — ввод завершёнincomplete — введено не полностьюcleared — поле очищеноТакая логика часто используется для активации кнопок отправки формы.
В некоторых системах один и тот же тип поля может принимать разные форматы документов. Например:
Inputmask({
mask: ["9999 999999", "99 99 999999"],
keepStatic: true
}).mask("#document");
Это полезно при миграции систем или поддержке разных стандартов.
При реализации масок для паспортов и документов часто возникают типовые проблемы:
autoUnmask, что приводит к сохранению
форматированных строкclearIncomplete, из-за чего в базе
оказываются неполные данныеПравильная настройка Inputmask в контексте документов всегда должна разделять: