Работа с Cleave.js начинается с подключения самой библиотеки и наличия базовой HTML-разметки, в которой будет находиться поле ввода. Библиотека предназначена для форматирования пользовательского ввода в реальном времени: номера телефонов, дат, чисел, кредитных карт и произвольных шаблонов.
Самый простой способ подключения — через CDN:
<script src="https://cdn.jsdelivr.net/npm/cleave.js@1.6.0/dist/cleave.min.js"></script>
После подключения библиотека становится доступной глобально через
конструктор Cleave.
Минимальная структура страницы:
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8" />
<title>Cleave.js пример</title>
</head>
<body>
<input type="text" id="phone" placeholder="Введите номер" />
<script src="https://cdn.jsdelivr.net/npm/cleave.js@1.6.0/dist/cleave.min.js"></script>
<script>
// инициализация будет здесь
</script>
</body>
</html>
Базовый принцип работы Cleave.js заключается в привязке к DOM-элементу и указании типа форматирования через конфигурационный объект.
Простейший рабочий пример — форматирование номера телефона:
<script>
const input = document.getElementById('phone');
const cleave = new Cleave(input, {
phone: true,
phoneRegionCode: 'RU'
});
</script>
После этого любое введённое значение автоматически преобразуется в формат телефонного номера. Пользователь вводит «цифры подряд», а библиотека добавляет пробелы, скобки и дефисы в соответствии с правилами региона.
В основе Cleave.js лежит перехват событий ввода (input,
keydown, paste) и преобразование значения поля
на лету. При каждом изменении:
Это означает, что разработчику не нужно вручную обрабатывать ввод, очищать строку или следить за курсором — библиотека делает это автоматически.
Кроме телефонов, часто требуется форматировать числа, например добавлять разделители тысяч:
<input type="text" id="number" placeholder="Введите число" />
<script>
const numberInput = document.getElementById('number');
const cleaveNumber = new Cleave(numberInput, {
numeral: true,
numeralThousandsGroupStyle: 'thousand'
});
</script>
Теперь ввод 1000000 будет автоматически отображаться как
1 000 000.
Ключевые параметры:
numeral: true — включает числовой режим;numeralThousandsGroupStyle — задаёт стиль
группировки;Одним из наиболее показательных сценариев является ввод даты:
<input type="text" id="date" placeholder="ДД/ММ/ГГГГ" />
<script>
const dateInput = document.getElementById('date');
const cleaveDate = new Cleave(dateInput, {
date: true,
datePattern: ['d', 'm', 'Y']
});
</script>
В этом режиме библиотека:
При вводе 01012025 результат будет преобразован в
01/01/2025.
Когда стандартных режимов недостаточно, применяется кастомная маска:
<input type="text" id="custom" placeholder="Код продукта" />
<script>
const customInput = document.getElementById('custom');
const cleaveCustom = new Cleave(customInput, {
delimiters: ['-', '-', '/'],
blocks: [3, 4, 2, 3],
uppercase: true
});
</script>
Здесь ввод разбивается на блоки фиксированной длины:
Между ними автоматически вставляются разделители -,
-, /.
Пример результата: ABC1234AB12CDE
преобразуется в:
ABC-1234-AB/12CDE
Cleave.js позволяет изменять поведение после инициализации через
метод setRawValue:
<script>
cleaveNumber.setRawValue('5000000');
</script>
При этом значение сразу будет отображено в отформатированном виде, без необходимости повторного ввода пользователем.
Каждое изменение значения можно отслеживать через событие:
<script>
input.addEventListener('input', function (e) {
console.log(e.target.value);
});
</script>
Однако важно понимать, что Cleave.js уже модифицирует значение до передачи в обработчик, поэтому в логах будет отображаться именно отформатированная строка.
Часто при первом использовании возникает ситуация, когда библиотека не применяется к элементу. Основные причины:
Корректный порядок инициализации:
<script>
document.addEventListener('DOMContentLoaded', function () {
new Cleave('#phone', {
phone: true,
phoneRegionCode: 'RU'
});
});
</script>
<input type="text" id="phone" placeholder="Телефон" />
<input type="text" id="date" placeholder="Дата" />
<input type="text" id="number" placeholder="Сумма" />
<script src="https://cdn.jsdelivr.net/npm/cleave.js@1.6.0/dist/cleave.min.js"></script>
<script>
new Cleave('#phone', {
phone: true,
phoneRegionCode: 'RU'
});
new Cleave('#date', {
date: true,
datePattern: ['d', 'm', 'Y']
});
new Cleave('#number', {
numeral: true,
numeralThousandsGroupStyle: 'thousand'
});
</script>
При вставке (paste) Cleave.js:
Это позволяет безопасно вставлять данные из внешних источников без дополнительной обработки.
На базовом уровне следует учитывать:
Первый рабочий пример в Cleave.js фактически демонстрирует фундаментальную модель работы библиотеки: связывание DOM-элемента с конфигурацией форматирования и автоматическое управление вводом без ручного вмешательства в значение поля. Это формирует основу для дальнейшего использования более сложных масок, пользовательских стратегий и интеграции с фреймворками.