Регистрозависимое преобразование входных данных в Cleave.js применяется на уровне обработки строки до применения масок и форматирования. Механизм основан на автоматической нормализации символов, вводимых пользователем, и позволяет приводить текст к верхнему или нижнему регистру без дополнительной логики на стороне приложения.
При инициализации экземпляра Cleave.js входное значение проходит несколько этапов трансформации: очистка, разбиение по маске, применение форматирования и финальная нормализация символов. Опции управления регистром вмешиваются в последний этап, когда строка уже сформирована согласно заданным правилам.
Основные параметры:
Обе опции взаимоисключающие по логике использования: активное значение одной перекрывает другую при одновременной установке.
Опция uppercase используется для стандартизации ввода,
где требуется единый формат идентификаторов, кодов или буквенных
комбинаций. Преобразование происходит автоматически при каждом изменении
значения поля.
Пример базовой инициализации:
import Cleave from 'cleave.js';
const input = new Cleave('#input', {
uppercase: true
});
При вводе:
abc123def
результат:
ABC123DEF
Особенность поведения заключается в том, что преобразование применяется не только к финальному значению, но и к промежуточным состояниям ввода. Это означает, что даже частично введённый текст сразу нормализуется.
Опция lowercase обеспечивает обратное поведение —
приведение всех буквенных символов к нижнему регистру. Данный режим
часто используется для email-подобных полей, где регистр не должен
влиять на семантику значения.
Пример конфигурации:
import Cleave from 'cleave.js';
const input = new Cleave('#input', {
lowercase: true
});
Ввод:
AbCDeF123
Результат:
abcdef123
Важно, что числовые и специальные символы остаются неизменными, так как преобразование затрагивает только символы латинского алфавита.
При использовании Cleave.js регистровые преобразования выполняются
поверх масок, заданных через blocks,
delimiter, prefix и другие параметры. Это
означает, что сначала формируется структурированное значение, и только
затем применяется нормализация регистра.
Пример комбинированной конфигурации:
const input = new Cleave('#input', {
blocks: [4, 4, 4],
delimiter: '-',
uppercase: true
});
Ввод:
ab12cd34ef56
Результат:
AB12-CD34-EF56
Регистровое преобразование не влияет на работу разделителей и блоков, так как применяется после разбиения строки.
Cleave.js обрабатывает ввод в режиме реального времени. Это означает,
что каждый символ проходит через pipeline преобразования. При включённом
uppercase или lowercase изменения видны сразу
после нажатия клавиши.
Особенности:
Пример вставки:
const input = new Cleave('#input', {
uppercase: true
});
Вставляем:
hello-world-2025
Результат:
HELLO-WORLD-2025
Если одновременно заданы обе опции:
uppercase: true,
lowercase: true
поведение становится неопределённым с точки зрения конфигурации, так как библиотека не предназначена для одновременного применения противоположных преобразований. На практике результат зависит от порядка внутренних проверок, но логически последний применённый фильтр перекрывает предыдущий.
Корректной считается только одна активная опция.
Регистровая нормализация в Cleave.js влияет на восприятие поля ввода, так как пользователь наблюдает изменение символов в реальном времени. Это создаёт эффект «автокоррекции», который особенно заметен при быстром наборе текста.
Типичные сценарии:
uppercaselowercaseuppercaseРегистровая трансформация уменьшает необходимость последующей валидации на сервере, поскольку входные данные уже нормализованы на клиенте.
При вставке текста Cleave.js перехватывает значение целиком и применяет преобразование регистра ко всей строке. Это особенно важно, так как вставляемые данные часто содержат смешанный регистр.
Пример:
const input = new Cleave('#input', {
lowercase: true
});
Вставка:
MiXeD InPuT StRiNg
Результат:
mixed input string
Регистровая нормализация в Cleave.js имеет ряд особенностей:
value вне контекста управляемого
input;Также важно учитывать, что библиотека не выполняет интеллектуальную
трансформацию слов, а лишь применяет стандартные методы JavaScript
toUpperCase() и toLowerCase() на уровне
символов.
При необходимости дополнительной логики преобразования регистра можно комбинировать Cleave.js с внешними обработчиками событий, однако это требует аккуратности, чтобы не возник конфликт обновлений значения.
Пример внешней обработки:
const input = new Cleave('#input', {
uppercase: true
});
document.querySelector('#input').addEventListener('input', (e) => {
console.log(e.target.value);
});
В этом случае Cleave.js уже возвращает нормализованное значение, поэтому дополнительное преобразование обычно избыточно.
Если значение поля изменяется программно:
input.setRawValue('testValue');
Cleave.js автоматически применяет текущую настройку регистра и преобразует значение в соответствии с конфигурацией. Это обеспечивает единообразие независимо от источника данных — пользовательский ввод или программное присвоение.
В сложных масках, где одновременно используются числовые блоки, разделители и буквенные сегменты, регистровая нормализация применяется только к буквенной части:
const input = new Cleave('#input', {
blocks: [3, 3, 3],
delimiter: '-',
uppercase: true
});
Ввод:
a1b2c3d4e5f6
Результат:
A1B-2C3-D4E
Числа остаются неизменными, в то время как буквы преобразуются.
Механизм uppercase/lowercase в Cleave.js рассчитан на детерминированную работу без состояния между рендерами. Каждый ввод обрабатывается независимо, что делает поведение предсказуемым при любых сценариях: ввод, вставка, очистка, программное обновление.
Такой подход упрощает интеграцию библиотеки в формы с жёсткими требованиями к формату данных, где регистр является частью структуры значения, а не его семантики.