Работа с числовыми полями ввода в веб-приложениях требует строгого контроля формата отображения. Пользовательский ввод чисел без форматирования быстро становится нечитаемым при увеличении разрядности, особенно в финансовых, аналитических и статистических интерфейсах. Cleave.js предоставляет встроенные механизмы для автоматической вставки разделителей тысяч и управления десятичной частью без необходимости ручной обработки строки.
Cleave.js работает по принципу преобразования «сырых» символов ввода в отформатированное значение в реальном времени. Для чисел это означает:
Ключевой режим работы активируется через numeral: true,
который включает числовой парсер Cleave.
const cleave = new Cleave(inputElement, {
numeral: true
});
В этом режиме библиотека начинает интерпретировать ввод как число, а не как произвольную строку.
Разделитель тысяч отвечает за визуальное группирование разрядов числа. В зависимости от локали это может быть запятая, пробел или точка.
При включённом числовом режиме Cleave.js автоматически вставляет разделители:
const cleave = new Cleave(inputElement, {
numeral: true,
numeralThousandsGroupStyle: 'thousand'
});
Пример поведения:
ввод: 1000
отображение: 1,000
ввод: 1000000
отображение: 1,000,000
Параметр numeralThousandsGroupStyle управляет стратегией
группировки:
Классическая западная система группировки по три цифры.
numeralThousandsGroupStyle: 'thousand'
Результат:
1234567 → 1,234,567Используется в индийской системе чисел.
numeralThousandsGroupStyle: 'lakh'
Результат:
1234567 → 12,34,567Китайская система группировки.
numeralThousandsGroupStyle: 'wan'
Результат:
12345678 → 1,2345,678Десятичный разделитель определяет границу между целой и дробной частью числа. Cleave.js позволяет задавать как символ разделителя, так и точность дробной части.
const cleave = new Cleave(inputElement, {
numeral: true,
numeralDecimalMark: '.'
});
Здесь numeralDecimalMark определяет символ
разделителя.
Для ограничения точности используется параметр
numeralDecimalScale.
const cleave = new Cleave(inputElement, {
numeral: true,
numeralDecimalMark: '.',
numeralDecimalScale: 2
});
Поведение:
12.345612.34Обрезка происходит автоматически без округления на уровне отображения (в зависимости от версии и настроек Cleave.js поведение может отличаться).
Наиболее распространённый сценарий — одновременная работа с тысячами и десятичными значениями.
const cleave = new Cleave(inputElement, {
numeral: true,
numeralThousandsGroupStyle: 'thousand',
numeralDecimalMark: '.',
numeralDecimalScale: 2
});
Пример:
1234567.891,234,567.89Такой формат часто используется в:
Разные регионы используют разные символы для группировки и десятичной части:
Cleave.js позволяет адаптировать отображение через
numeralDecimalMark, но разделитель тысяч задаётся косвенно
через стиль группировки и локаль UI.
Пример европейского формата:
const cleave = new Cleave(inputElement, {
numeral: true,
numeralThousandsGroupStyle: 'thousand',
numeralDecimalMark: ','
});
Результат:
1234567,89 → 1,234,567,89Cleave.js обрабатывает ввод постсимвольным образом. Это означает:
Особенность числового режима — нормализация строки после каждого изменения.
При вставке текста из буфера обмена Cleave.js:
Пример:
1 234 567.89 USD1,234,567.89В числовом режиме автоматически игнорируются:
Если пользователь вводит 12.3.4, библиотека:
Результат: 12.34 или 12.3 в зависимости от
конфигурации.
Cleave.js нормализует ввод:
000123 → 123Это важно для предотвращения некорректного отображения числовых значений.
Часто числовые поля требуют добавления валютных или единичных обозначений.
const cleave = new Cleave(inputElement, {
numeral: true,
prefix: '$',
numeralThousandsGroupStyle: 'thousand'
});
Результат:
1234 → $1,234Важно учитывать, что префикс не участвует в числовой обработке и отделяется логически от значения.
Cleave.js позволяет изменять параметры после инициализации:
cleave.setRawValue('1000000');
cleave.properties.numeralDecimalScale = 3;
cleave.properties.numeralThousandsGroupStyle = 'lakh';
cleave._onChange();
Это используется при переключении локалей или режимов отображения без пересоздания инстанса.
Числовой режим поддерживает отрицательные значения:
-1234-1,234Минус сохраняется в начале строки и не влияет на группировку.
При работе с длинными числами (10+ разрядов):
Оптимизация достигается за счёт:
numeralDecimalScale_onChange()Cleave.js не выполняет валидацию числового значения, он только форматирует ввод. Это означает:
1,234 остаётся строкойЧастая практика:
Перед отправкой формы обычно выполняется очистка:
const rawValue = cleave.getRawValue();
В финансовых формах Cleave.js обеспечивает:
При этом важно учитывать:
Числовой формат может использоваться параллельно с другими возможностями:
Однако нельзя комбинировать с форматами, которые конфликтуют с числовым парсером (например, произвольные маски ввода без numeral-режима).