Cleave.js предоставляет гибкий механизм для форматирования пользовательского ввода. Создание собственной библиотеки паттернов позволяет стандартизировать обработку данных во всём проекте, повышая повторное использование кода и упрощая поддержку. Библиотека паттернов представляет собой набор заранее определённых форматов для чисел, дат, телефонов, кредитных карт и других типов данных.
Базовая структура библиотеки должна быть модульной и легко расширяемой. Оптимально использовать объект, в котором ключи соответствуют именам паттернов, а значения — конфигурациям Cleave.js:
const inputPatterns = {
phone: {
phone: true,
phoneRegionCode: 'RU'
},
creditCard: {
creditCard: true,
onCreditCardTypeChanged: function(type) {
console.log('Detected card type:', type);
}
},
date: {
date: true,
datePattern: ['d', 'm', 'Y']
},
customNumber: {
numeral: true,
numeralThousandsGroupStyle: 'thousand',
numeralDecimalMark: '.'
}
};
Каждый паттерн содержит чётко определённые параметры, обеспечивающие единообразное поведение для всех полей ввода, использующих данный формат.
Для централизованного управления паттернами рекомендуется создать отдельный модуль, который экспортирует все доступные форматы:
export function getPattern(name) {
return inputPatterns[name] || {};
}
Использование через Cleave.js:
const phoneInput = new Cleave('#phone', getPattern('phone'));
const cardInput = new Cleave('#card', getPattern('creditCard'));
Такой подход минимизирует дублирование и упрощает поддержку проекта при изменении требований к форматам.
Иногда стандартных паттернов Cleave.js недостаточно. В таких случаях
реализуются кастомные форматы с использованием blocks,
delimiters и prefix:
inputPatterns.productCode = {
blocks: [3, 4, 2],
delimiters: ['-', '-', ''],
uppercase: true
};
Это позволяет реализовать форматирование артикулов, кодов скидок и других специфичных для проекта значений.
Библиотека паттернов должна включать не только форматирование, но и
возможность встроенной валидации. Cleave.js
предоставляет события onValueChanged, которые можно
использовать для проверки корректности ввода:
const emailPattern = {
blocks: [64],
delimiters: [],
onValueChanged: function(event) {
const value = event.target.value;
if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value)) {
event.target.classList.add('invalid');
} else {
event.target.classList.remove('invalid');
}
}
};
Обработка событий позволяет интегрировать библиотеку с системой уведомлений или отображением ошибок в интерфейсе.
Для телефонных номеров, дат и денежных значений важно поддерживать региональные стандарты. Cleave.js позволяет указывать регион для телефонных номеров и настраивать формат даты:
inputPatterns.phoneUS = {
phone: true,
phoneRegionCode: 'US'
};
inputPatterns.dateEU = {
date: true,
datePattern: ['d', 'm', 'Y']
};
Систематическое использование таких паттернов гарантирует единообразие представления данных и упрощает международную поддержку.
Библиотека паттернов должна быть легко интегрируемой с различными UI-компонентами:
ref или v-model.querySelector и инициализация Cleave.js.Пример динамического подключения:
document.addEventListener('inputAdded', function(e) {
const input = e.detail.inputElement;
const pattern = getPattern(input.dataset.pattern);
new Cleave(input, pattern);
});
Библиотека паттернов должна быть:
Реализация этих принципов позволяет создать надёжную и единообразную систему работы с вводом данных во всём проекте.
Эти подходы формируют основу профессиональной библиотеки паттернов для Cleave.js, которая упрощает управление формами, повышает качество кода и снижает количество ошибок ввода.