Cleave.js представляет собой лёгкую библиотеку для форматирования пользовательского ввода в реальном времени. В контексте чистого JavaScript она чаще всего подключается напрямую в браузере без сборщиков и бандлеров, что делает CDN-интеграцию базовым способом использования.
Подключение через CDN осуществляется добавлением
<script> перед закрывающим тегом
</body>:
<script src="https://cdn.jsdelivr.net/npm/cleave.js@1.6.0/dist/cleave.min.js"></script>
После загрузки скрипта глобально становится доступен конструктор
Cleave.
Инициализация выполняется после загрузки DOM:
<input id="phone" type="text" />
<script>
new Cleave('#phone', {
phone: true,
phoneRegionCode: 'RU'
});
</script>
Ключевой момент интеграции — библиотека не требует дополнительных зависимостей и работает поверх стандартных DOM-элементов, изменяя значение поля ввода на лету.
Основная модель использования строится вокруг создания экземпляра:
const cleaveInstance = new Cleave(selector, options);
Где selector может быть:
'#input')document.querySelector('#input'))Пример прямой работы с элементом:
const input = document.querySelector('#credit-card');
const creditCardFormatter = new Cleave(input, {
creditCard: true
});
Библиотека автоматически:
Одним из наиболее частых сценариев является работа с числовыми значениями.
new Cleave('#amount', {
numeral: true,
numeralThousandsGroupStyle: 'thousand'
});
Поведение:
Дополнительные параметры числового режима:
new Cleave('#price', {
numeral: true,
numeralDecimalMark: '.',
delimiter: ',',
numeralDecimalScale: 2
});
Особенность интеграции в чистом JS — отсутствие необходимости преобразования строки вручную: библиотека поддерживает синхронизацию значения DOM-элемента в реальном времени.
Телефонный режим является одним из ключевых сценариев применения.
new Cleave('#phone', {
phone: true,
phoneRegionCode: 'US'
});
При этом библиотека:
Для универсальных форматов:
new Cleave('#phone', {
delimiters: ['(', ')', ' ', '-'],
blocks: [0, 3, 0, 3, 4],
numericOnly: true
});
Такой подход полезен при кастомных форматах, где требуется полный контроль над структурой.
Встроенная поддержка кредитных карт позволяет минимизировать ручную логику.
new Cleave('#card', {
creditCard: true
});
Поддерживаемые особенности:
При необходимости можно комбинировать с событиями DOM:
const card = new Cleave('#card', { creditCard: true });
document.querySelector('#card').addEventListener('change', () => {
console.log(card.getRawValue());
});
Гибкость Cleave.js проявляется в возможности задания структуры через
blocks и delimiters.
new Cleave('#serial', {
blocks: [4, 4, 4, 4],
delimiter: '-',
numericOnly: true
});
Результат:
1234-5678-9012-3456
Расширенные сценарии:
new Cleave('#custom', {
blocks: [3, 3, 4],
delimiters: ['.', '.', '-'],
numericOnly: true
});
Такая модель используется для:
Каждый экземпляр предоставляет методы управления состоянием.
const raw = cleaveInstance.getRawValue();
Используется для:
cleaveInstance.setRawValue('1234567890');
Форматирование применяется автоматически после установки.
В чистом JavaScript часто возникает необходимость менять формат «на лету».
cleaveInstance.setPhoneRegionCode('GB');
или полная переинициализация:
cleaveInstance.destroy();
new Cleave('#phone', {
phone: true,
phoneRegionCode: 'DE'
});
Такой подход используется при:
Cleave.js не заменяет стандартные события, а дополняет их.
const input = document.querySelector('#amount');
input.addEventListener('input', () => {
console.log(input.value);
});
Особенность заключается в том, что значение уже отформатировано в момент события.
Для отслеживания «чистого» значения:
input.addEventListener('blur', () => {
console.log(cleaveInstance.getRawValue());
});
При вставке больших строк библиотека автоматически:
new Cleave('#input', {
blocks: [4, 4, 4],
delimiter: ' '
});
Если вставить:
123456781234
результат будет:
1234 5678 1234
Чистый JavaScript позволяет без ограничений инициализировать множество полей:
document.querySelectorAll('.date-input').forEach((el) => {
new Cleave(el, {
date: true,
datePattern: ['d', 'm', 'Y']
});
});
Такой подход используется в формах с повторяющимися блоками:
Поддержка дат позволяет стандартизировать ввод.
new Cleave('#date', {
date: true,
datePattern: ['d', 'm', 'Y']
});
Поведение:
Расширенные варианты:
new Cleave('#date', {
date: true,
delimiter: '-',
datePattern: ['Y', 'm', 'd']
});
При работе в SPA или динамических интерфейсах важно освобождать ресурсы.
cleaveInstance.destroy();
После вызова:
Это критично при:
Cleave.js не является валидатором, но влияет на ввод.
Типичные сценарии:
Пример числового режима:
new Cleave('#num', {
numeral: true
});
Любые буквы будут отфильтрованы на уровне ввода.
При использовании без фреймворков важно учитывать:
destroy() приводит к
дублированию обработчиковvalue через JS может требовать
повторного форматированияКорректный порядок:
document.addEventListener('DOMContentLoaded', () => {
new Cleave('#input', { numeral: true });
});
Некоторые сценарии требуют объединения логики:
new Cleave('#complex', {
numeral: true,
numeralThousandsGroupStyle: 'thousand',
prefix: '$',
noImmediatePrefix: true
});
Такой подход используется в финансовых формах, где важны:
Иногда формат зависит от длины или контекста:
const input = document.querySelector('#dynamic');
const cleave = new Cleave(input, {
numericOnly: true,
blocks: [3, 3, 4]
});
input.addEventListener('focus', () => {
cleave.setRawValue(input.value.replace(/\D/g, ''));
});
Такой подход применяется при: