Для работы с телефонными номерами в формах Cleave.js предоставляет встроенный функционал маскировки и форматирования. Основной способ использования заключается в создании нового экземпляра Cleave с указанием селектора поля и конфигурации:
const phoneInput = new Cleave('#phone', {
phone: true,
phoneRegionCode: 'RU',
delimiter: ' ',
numericOnly: true
});
Ключевые параметры:
phone: true — активирует форматирование телефонного
номера.phoneRegionCode — задает страновой код для локализации
формата.delimiter — символ, используемый для разделения частей
номера.numericOnly: true — разрешает ввод только цифр.Это гарантирует корректное отображение номера при вводе: например,
для России формат будет автоматически преобразован в
+7 999 999-99-99.
Cleave.js позволяет автоматически подстраивать маску под вводимый номер, поддерживая несколько стран. Для этого используется массив регионов и колбэки:
const multiPhoneInput = new Cleave('#multi-phone', {
phone: true,
phoneRegionCode: 'US',
onValueChanged: function(e) {
const value = e.target.rawValue;
if (value.startsWith('7')) {
multiPhoneInput.setPhoneRegionCode('RU');
}
}
});
Особенности:
onValueChanged позволяет реагировать на изменение ввода
и корректировать маску.setPhoneRegionCode() — динамическая смена региона без
перезапуска компонента.Это особенно полезно для форм, принимающих международные номера, где пользователь может вводить номер в любом формате.
Для регистрационных форм критически важно, чтобы Cleave.js работал в
связке с валидацией. Наиболее распространенный подход — использование
событий input и blur для проверки формата и
длины номера:
const form = document.querySelector('#registration-form');
const phoneField = document.querySelector('#phone');
phoneField.addEventListener('blur', () => {
const rawNumber = phoneInput.getRawValue();
if (rawNumber.length < 10) {
phoneField.classList.add('error');
} else {
phoneField.classList.remove('error');
}
});
Выделенные моменты:
getRawValue() возвращает номер без форматирования.Cleave.js автоматически применяет маску при вставке текста, но можно
усилить контроль через событие onValueChanged:
const phonePasteInput = new Cleave('#paste-phone', {
phone: true,
phoneRegionCode: 'RU',
onValueChanged: function(e) {
let value = e.target.rawValue.replace(/\D/g, '');
if (value.length > 11) {
value = value.slice(0, 11);
e.target.value = value;
}
}
});
Ключевые моменты:
Cleave.js легко сочетается с популярными фреймворками и библиотеками, например, с Bootstrap или Material UI:
<div class="form-group">
<label for="phone">Телефон</label>
<input type="text" id="phone" class="form-control">
</div>
new Cleave('#phone', {
phone: true,
phoneRegionCode: 'RU',
delimiter: ' ',
});
Особенности интеграции:
React, Vue
и Angular через обертки или нативные хуки событий.Иногда номера содержат дополнительные коды, например, внутренние добавочные номера. Для таких случаев можно использовать кастомные блоки:
const extendedPhone = new Cleave('#ext-phone', {
blocks: [2, 3, 3, 2, 2],
delimiters: ['+', ' ', '-', '-'],
numericOnly: true
});
Разбор конфигурации:
blocks — массив длин сегментов номера.delimiters — массив символов-разделителей между
сегментами.При регистрации телефон часто проверяется через API для отправки кода подтверждения. Cleave.js позволяет легко получать очищенное значение для отправки на сервер:
const phoneField = document.querySelector('#phone');
const phoneCleave = new Cleave(phoneField, {
phone: true,
phoneRegionCode: 'RU',
});
document.querySelector('#send-code').addEventListener('click', () => {
const rawNumber = phoneCleave.getRawValue();
fetch('/api/send-sms', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({phone: rawNumber})
});
});
Особенности:
getRawValue() обеспечивает передачу чистого номера без
форматирования.Cleave.js предоставляет гибкие инструменты для регистрации с телефоном: от простой маскировки до сложных международных и корпоративных сценариев, динамических масок, валидации и интеграции с серверной логикой.