IBAN (International Bank Account Number) в контексте Inputmask представляет собой специализированный алиас маски ввода, предназначенный для корректного форматирования и частичной валидации международных банковских счетов. IBAN имеет строгую структуру, включающую код страны, контрольные цифры и основной номер счёта, длина которого варьируется в зависимости от страны. Основная задача маски — обеспечить единый формат ввода и снизить количество ошибок при ручном вводе.
IBAN состоит из следующих компонентов:
Пример IBAN:
GB29NWBK60161331926819
DE89 3704 0044 0532 0130 00
FR14 2004 1010 0505 0001 3M02 606
Особенности формата:
В Inputmask IBAN реализован как встроенный alias, что позволяет использовать его без ручного описания шаблона.
import Inputmask from "inputmask";
const element = document.querySelector("#iban");
Inputmask({
alias: "iban"
}).mask(element);
В этом режиме библиотека:
При использовании alias "iban" Inputmask выполняет:
Пример поведения:
Ввод:
de89370400440532013000
Отображение:
DE89 3704 0044 0532 0130 00
Inputmask позволяет управлять поведением IBAN через параметры конфигурации.
Определяет использование встроенного шаблона:
alias: "iban"
Позволяет ограничить формат конкретной страной:
Inputmask({
alias: "iban",
country: "DE"
}).mask("#iban");
В этом случае маска будет учитывать длину и структуру немецкого IBAN.
Управляет отображением шаблонных символов:
Inputmask({
alias: "iban",
placeholder: " "
}).mask("#iban");
Определяет, будет ли возвращаться «чистое» значение без форматирования:
Inputmask({
alias: "iban",
autoUnmask: true
}).mask("#iban");
При получении значения:
const value = element.inputmask.unmaskedvalue();
Управляют отображением маски:
Inputmask({
alias: "iban",
showMaskOnFocus: true,
showMaskOnHover: false
}).mask("#iban");
Inputmask обеспечивает структурную корректность ввода, но не всегда выполняет полный алгоритм проверки контрольной суммы (mod 97). Поэтому различают два уровня проверки:
Проверяет:
Алгоритм IBAN:
Inputmask сам по себе не всегда выполняет этот шаг, поэтому часто используется внешняя проверка:
function validateIBAN(iban) {
const rearranged = iban.slice(4) + iban.slice(0, 4);
const numeric = rearranged.replace(/[A-Z]/g, ch =>
ch.charCodeAt(0) - 55
);
let remainder = numeric;
while (remainder.length > 2) {
const block = remainder.slice(0, 9);
remainder = (parseInt(block, 10) % 97).toString() + remainder.slice(block.length);
}
return parseInt(remainder, 10) % 97 === 1;
}
Срабатывает, когда введено полное значение IBAN:
Inputmask({
alias: "iban",
oncomplete: function () {
console.log("IBAN введён полностью");
}
}).mask("#iban");
Срабатывает при потере фокуса, если значение не завершено:
Inputmask({
alias: "iban",
onincomplete: function () {
console.log("IBAN введён не полностью");
}
}).mask("#iban");
Срабатывает при очистке поля:
Inputmask({
alias: "iban",
oncleared: function () {
console.log("Поле IBAN очищено");
}
}).mask("#iban");
Inputmask сохраняет два представления данных:
Получение чистого значения:
const input = document.querySelector("#iban");
const raw = input.inputmask.unmaskedvalue();
Получение отображаемого значения:
const value = input.value;
const input = document.querySelector("#iban");
input.inputmask.setValue("DE89370400440532013000");
При этом значение автоматически форматируется:
DE89 3704 0044 0532 0130 00
input.inputmask.setValue("");
input.inputmask.remove();
После удаления поле становится обычным input без ограничений.
В случаях, когда встроенный alias недостаточен, используется расширение конфигурации.
Inputmask.extendAliases({
customIBAN: {
alias: "iban",
country: "FR",
greedy: false,
autoUnmask: true,
definitions: {
"a": {
validator: "[A-Za-z]"
},
"9": {
validator: "[0-9]"
}
}
}
});
Использование:
Inputmask({
alias: "customIBAN"
}).mask("#iban");
При использовании IBAN в формах важно учитывать:
autoUnmask при отправке
формы.Пример отправки:
form.addEventListener("submit", (e) => {
const iban = input.inputmask.unmaskedvalue();
console.log("Отправка IBAN:", iban);
});
Inputmask автоматически:
При наборе символов:
Если IBAN не завершён:
incomplete;onincomplete событие может быть использовано для
блокировки отправки формы.Inputmask IBAN поддерживает различные страны через внутренний справочник:
Каждая страна имеет:
При указании country маска становится строго
типизированной под конкретный формат.