Библиотека Cleave.js строится вокруг одного основного объекта-конструктора, который принимает целевой DOM-элемент и объект конфигурации. Базовая форма инициализации выглядит следующим образом:
const cleave = new Cleave(selectorOrElement, options);
В качестве первого аргумента может использоваться:
HTMLInputElement)Второй аргумент представляет собой объект настроек, определяющий поведение форматирования.
Пример минимальной инициализации:
const cleave = new Cleave('#phone', {
phone: true,
phoneRegionCode: 'RU'
});
Объект конфигурации Cleave.js имеет плоскую структуру с несколькими логическими группами параметров. Несмотря на отсутствие вложенных схем, параметры можно классифицировать по функциональным областям:
Каждая группа опций активирует определённый режим обработки значения поля.
Базовые параметры определяют поведение библиотеки независимо от типа форматирования.
numeralВключает числовой режим обработки строки.
{
numeral: true
}
При активации Cleave.js начинает интерпретировать ввод как число, автоматически применяя разделители и форматирование.
numeralDecimalMarkОпределяет символ десятичного разделителя.
{
numeral: true,
numeralDecimalMark: '.'
}
Поддерживаются различные локали, где разделитель может быть запятой.
delimiterУстанавливает основной разделитель групп разрядов.
{
numeral: true,
delimiter: ' '
}
Чаще всего используется пробел, запятая или точка.
prefixДобавляет фиксированный префикс к значению.
{
numeral: true,
prefix: '$'
}
Префикс отображается в поле, но не является частью логической числовой строки.
noImmediatePrefixКонтролирует момент отображения префикса.
{
prefix: '€',
noImmediatePrefix: true
}
При включении префикс появляется только после начала ввода.
Числовой режим является одной из ключевых функций Cleave.js и включает дополнительные опции управления структурой числа.
numeralThousandsGroupStyleОпределяет стиль группировки разрядов:
thousandlakhwanПример:
{
numeral: true,
numeralThousandsGroupStyle: 'thousand'
}
numeralDecimalScaleОграничивает количество знаков после запятой.
{
numeral: true,
numeralDecimalScale: 2
}
Используется для финансовых значений, где требуется фиксированная точность.
numeralPositiveOnlyЗапрещает ввод отрицательных значений.
{
numeral: true,
numeralPositiveOnly: true
}
Cleave.js поддерживает форматирование дат через блоковую структуру ввода.
dateАктивирует режим обработки даты.
{
date: true
}
datePatternОпределяет порядок блоков даты:
{
date: true,
datePattern: ['d', 'm', 'Y']
}
Возможные элементы массива:
d — деньm — месяцY — годdelimiter (в контексте
дат)Используется как разделитель блоков даты:
{
date: true,
datePattern: ['Y', 'm', 'd'],
delimiter: '-'
}
Механизм блоков позволяет задавать фиксированную структуру строки.
blocksОпределяет длину каждой группы символов:
{
blocks: [4, 4, 4, 4],
delimiter: '-'
}
Типичный пример — банковские карты:
1234-5678-9012-3456
uppercaseПринудительное преобразование ввода в верхний регистр:
{
blocks: [3, 3, 3],
uppercase: true
}
lowercaseАналогично верхнему регистру, но для нижнего:
{
blocks: [2, 2, 2],
lowercase: true
}
Один из наиболее сложных режимов Cleave.js — обработка телефонных номеров.
phoneАктивирует специализированную логику форматирования:
{
phone: true
}
phoneRegionCodeОпределяет региональную маску:
{
phone: true,
phoneRegionCode: 'US'
}
Регион влияет на структуру номера и правила группировки.
rawValueTrimPrefixОпределяет, удаляется ли префикс при получении «сырого» значения:
{
prefix: '$',
rawValueTrimPrefix: true
}
stripLeadingZeroesУдаляет ведущие нули в числах:
{
numeral: true,
stripLeadingZeroes: true
}
Опции Cleave.js не являются взаимоисключающими, однако некоторые
комбинации активируют приоритетные режимы обработки. Например, включение
phone: true переопределяет числовые и блоковые настройки,
поскольку форматирование подчиняется телефонной маске.
Пример комбинированной конфигурации:
const cleave = new Cleave('#input', {
prefix: 'ID-',
blocks: [3, 3, 3],
delimiter: '-',
uppercase: true
});
Внутренняя логика Cleave.js работает по принципу последовательной проверки активных режимов:
phone,
date, numeral)Конфликтующие параметры разрешаются в пользу более специфичного режима.
Обобщённо конфигурация может быть представлена следующим шаблоном:
{
// режим
numeral: true | false,
date: true | false,
phone: true | false,
// форматирование
delimiter: string,
blocks: number[],
// числовые настройки
numeralDecimalMark: string,
numeralDecimalScale: number,
numeralThousandsGroupStyle: string,
// поведение
prefix: string,
noImmediatePrefix: boolean,
uppercase: boolean,
lowercase: boolean
}
При создании экземпляра без объекта настроек Cleave.js не применяет форматирование и работает как пассивный обработчик ввода:
const cleave = new Cleave('#input');
В этом режиме изменения DOM отсутствуют, а библиотека фактически не вмешивается в поток данных.
После инициализации объект Cleave сохраняет внутреннее состояние. Изменение опций через прямое присваивание не поддерживается. Для обновления параметров требуется переинициализация экземпляра:
cleave.destroy();
cleave = new Cleave('#input', {
numeral: true
});