Cleave.js развивается динамично, что подразумевает появление новых возможностей и улучшений в обработке ввода. Однако при внедрении библиотеки в проекты с устаревшей кодовой базой важной становится обратная совместимость. Она позволяет использовать новые функции без ломки существующего поведения форм и их интеграций.
Библиотека придерживается семантического версионирования (SemVer). Основные принципы:
Это позволяет точно контролировать, когда обновление может повлиять на существующий код.
Некоторые опции, доступные в ранних версиях, могут быть помечены как устаревшие, но оставлены для совместимости:
numeralThousandsGroupStyle — до версии 1.5.0
поддерживалась только в ограниченном наборе стилей группировки чисел. В
новых версиях используется более универсальная опция
numeralGroupingStyle.creditCardStrictMode — опция, отвечавшая за строгую
проверку ввода номера карты, постепенно заменяется на более гибкие
функции с использованием blocks и
delimiters.Важно сохранять эти устаревшие параметры при переходе на новую версию, чтобы формы, использующие их, продолжали корректно работать.
Cleave.js позволяет автоматически форматировать числовые значения. В старых версиях применялись фиксированные блоки для разделения тысяч и десятков, например:
new Cleave('.input-number', {
numeral: true,
numeralThousandsGroupStyle: 'thousand'
});
В новых версиях рекомендуется использовать более гибкие стили:
new Cleave('.input-number', {
numeral: true,
numeralGroupingStyle: 'thousand'
});
Для обратной совместимости можно оставить старую опцию, так как библиотека корректно её интерпретирует.
Ранние версии Cleave.js поддерживали только базовые маски
MM/DD/YYYY и DD/MM/YYYY. Новые версии добавили
возможность создавать кастомные паттерны с помощью
массива blocks и строки delimiter:
new Cleave('.input-date', {
date: true,
datePattern: ['Y', 'm', 'd']
});
Старые маски остаются рабочими, но рекомендуется использовать новые паттерны для повышения гибкости и поддержки нестандартных форматов.
Cleave.js обеспечивает работу в современных и устаревших браузерах (IE11+). Основные моменты:
input,
keydown, paste.Object.assign и Array.prototype.includes.rawValue и
setRawValue, корректно работают и в старых версиях,
обеспечивая единый API.Многие проекты создают свои обертки вокруг Cleave.js, например, для React или Angular. Для обратной совместимости:
destroy(),
setRawValue() и событий onValueChanged.setOptions() без необходимости пересоздавать
экземпляр.Пошаговая стратегия:
Использование этой стратегии минимизирует риск нарушения функционала и обеспечивает плавную интеграцию новых возможностей.
Старый формат чисел:
new Cleave('.input-old-number', {
numeral: true,
numeralThousandsGroupStyle: 'thousand'
});
Совместимый новый формат:
new Cleave('.input-new-number', {
numeral: true,
numeralGroupingStyle: 'thousand'
});
Старый формат даты:
new Cleave('.input-old-date', {
date: true,
datePattern: ['m', 'd', 'Y']
});
Новый формат с кастомной маской:
new Cleave('.input-new-date', {
date: true,
datePattern: ['Y', 'm', 'd']
});
Сохранение старых опций позволяет библиотеке автоматически корректно обработать ввод, обеспечивая бесшовную миграцию без потери данных и сбоев валидации.