Механизм обработки платёжных карт в Cleave.js основан на детектировании типа карты по BIN/IIN-префиксу и применении соответствующей маски группировки цифр. Внутри библиотеки реализована логика сопоставления введённых символов с известными диапазонами номеров, что позволяет динамически менять формат ввода без ручного переключения конфигурации.
Основная цель этого режима — стандартизировать ввод данных банковских карт и минимизировать ошибки при вводе номера, автоматически подстраивая структуру поля под конкретную платёжную систему.
Наиболее распространённые платёжные системы используют классическую 16-значную структуру номера:
Форматирование в Cleave.js:
#### #### #### ####Внутренне библиотека применяет единый шаблон группировки:
4 - 4 - 4 - 4При этом длина может варьироваться в зависимости от региональных исключений (например, Maestro может иметь 18–19 цифр), и Cleave.js адаптирует разбиение, сохраняя последние группы корректно выровненными.
Карты AmEx используют нестандартную структуру:
Формат:
4 - 6 - 5Пример визуализации:
#### ###### #####В Cleave.js этот формат активируется автоматически при распознавании BIN-диапазонов American Express. При переключении типа карты библиотека перераспределяет уже введённые цифры между блоками без сброса значения.
Некоторые варианты Diners Club используют вариативную длину номера:
Типичный формат:
4 - 6 - 4или в отдельных диапазонах:
4 - 4 - 4 - 4Cleave.js выбирает схему динамически, ориентируясь на префикс номера и длину, разрешённую для конкретного диапазона BIN.
Discover использует 16-значную структуру, аналогичную Visa и Mastercard:
4 - 4 - 4 - 4Особенность заключается не в группировке, а в диапазоне префиксов, которые распознаются библиотекой как отдельный тип карты.
JCB также использует 16-значный формат:
4 - 4 - 4 - 4Cleave.js включает диапазоны BIN, позволяющие корректно идентифицировать карту на ранних этапах ввода, начиная с первых 4–6 символов.
Ключевой механизм работы заключается в анализе префикса номера:
Пример поведения:
Пользователь вводит первые цифры 4
При вводе 34 или 37
При смене типа уже введённые цифры перераспределяются по новым блокам
Это достигается за счёт внутреннего состояния instance Cleave и функции переразметки строки.
Включение режима работы с платёжными картами осуществляется через параметр:
creditCard: trueБазовая инициализация:
Дополнительный параметр:
onCreditCardTypeChangedИспользуется для реакции на смену типа карты. Библиотека передаёт определённый идентификатор, например:
visamastercardamexdiscoverЭто позволяет синхронизировать UI (иконки платёжных систем, подсветку, подсказки).
Если введённый номер не совпадает ни с одним известным диапазоном:
unknownЭто важно для поддержки новых или локальных платёжных систем, которые не включены в стандартный набор Cleave.js.
Cleave.js допускает модификацию логики определения карты через кастомные настройки:
Практически это используется для:
Пример расширения логики включает добавление нового префикса и сопоставление его с существующим или новым форматом блока.
Некоторые платёжные системы не соответствуют классическим схемам:
Cleave.js обрабатывает такие случаи через:
Режим платёжных карт может конфликтовать с другими масками, если они применяются к одному input:
Приоритет всегда отдаётся creditCard-режиму, если он активирован. Это связано с тем, что детектирование банковской карты требует постоянного пересчёта структуры строки.
Обработка платёжных систем оптимизирована для работы на каждом keystroke:
Это позволяет использовать Cleave.js в формах с высокой частотой ввода без заметных задержек даже при переключении типов карт в реальном времени.