Работа с банковскими картами в Cleave.js строится вокруг механизма распознавания типа карты по введённым цифрам и событийной модели, позволяющей получать актуальную информацию о BIN-префиксе в процессе ввода. Это используется для автоматического определения платёжной системы (Visa, MasterCard, American Express и других), динамического изменения UI и валидации форм.
Определение типа карты основано на анализе первых цифр номера (BIN/IIN диапазон). Cleave.js использует встроенные регулярные выражения и маски, соответствующие стандартным диапазонам платёжных систем.
При включении режима кредитных карт библиотека:
Для активации логики распознавания типа карты используется параметр конфигурации:
creditCard: trueПри этом Cleave.js автоматически:
Пример базовой инициализации:
const cleave = new Cleave('.card-input', {
creditCard: true
});
В этом режиме библиотека начинает интерпретировать ввод как номер банковской карты, а не произвольную числовую строку.
Основной механизм получения информации о типе карты — callback
onCreditCardTypeChanged.
Он вызывается каждый раз, когда Cleave.js определяет изменение типа карты на основе введённого префикса.
onCreditCardTypeChanged: function (type) {}
Параметр type содержит строковое значение текущего типа
карты.
const cleave = new Cleave('.card-input', {
creditCard: true,
onCreditCardTypeChanged: function (type) {
console.log('Тип карты:', type);
}
});
Типы, которые могут быть возвращены:
visamastercardamexdinersdiscoverjcbunknownИнформация о типе карты используется для динамического управления интерфейсом.
onCreditCardTypeChanged: function (type) {
const logo = document.querySelector('.card-logo');
logo.className = 'card-logo';
if (type !== 'unknown') {
logo.classList.add(type);
}
}
CSS-логика может подставлять соответствующие изображения через классы:
.card-logo.visa {
background-image: url('/img/visa.svg');
}
.card-logo.mastercard {
background-image: url('/img/mastercard.svg');
}
Разные платёжные системы используют разные длины номеров. Например, American Express — 15 цифр, Visa и MasterCard — 16.
onCreditCardTypeChanged: function (type) {
const input = document.querySelector('.card-input');
if (type === 'amex') {
input.maxLength = 17; // с пробелами
} else {
input.maxLength = 19;
}
}
Cleave.js использует таблицу префиксов:
4)51–55,
2221–2720)Алгоритм:
unknown.Хотя Cleave.js не всегда предоставляет прямое публичное поле типа карты, состояние можно косвенно отслеживать через callback и сохранять в внешней переменной:
let currentCardType = 'unknown';
const cleave = new Cleave('.card-input', {
creditCard: true,
onCreditCardTypeChanged: function (type) {
currentCardType = type;
}
});
Это состояние затем используется в логике формы:
function canSubmit() {
return currentCardType !== 'unknown';
}
Определение типа карты на клиенте не заменяет серверную проверку, но позволяет оптимизировать поток данных:
Пример:
onCreditCardTypeChanged: function (type) {
const allowed = ['visa', 'mastercard'];
if (!allowed.includes(type)) {
showError('Карта не поддерживается');
}
}
Состояние unknown возникает в случаях:
Практическая стратегия обработки:
Распознавание типа карты тесно связано с форматированием:
Cleave.js автоматически переключает маску:
Visa: 4111 1111 1111 1111
Amex: 3782 822463 10005
Это происходит синхронно с определением типа, без дополнительной настройки.
onCreditCardTypeChanged: function (type) {
const input = document.querySelector('.card-input');
input.dataset.type = type;
}
const allowedTypes = ['visa', 'mastercard'];
onCreditCardTypeChanged: function (type) {
if (!allowedTypes.includes(type)) {
disableSubmit();
} else {
enableSubmit();
}
}
onCreditCardTypeChanged: function (type) {
console.log('Detected card type:', type);
}
Следует учитывать особенности:
Механизм определения типа карты используется для:
В сочетании с форматированием ввода Cleave.js создаёт поведение, близкое к нативным платёжным формам банковских систем, где тип карты определяется по мере ввода первых цифр и влияет на дальнейшее взаимодействие с полем.