Параметр numericOnly относится к поведенческому уровню
обработки ввода и определяет, каким образом библиотека обрабатывает
символьный поток в текстовом поле. Его основная задача — ограничение
входных данных исключительно числовым диапазоном с жёсткой фильтрацией
всех остальных символов до этапа форматирования.
numericOnly включает режим, при котором входной поток
нормализуется в числовое представление ещё до применения форматирующих
правил. Это означает, что любые символы, не входящие в допустимое
множество цифр, подвергаются немедленному удалению.
Ключевая характеристика:
0–9Внутренне этот процесс можно рассматривать как предварительный фильтр (pre-processor), который формирует «чистую» строку для последующих операций.
Фильтрация в режиме numericOnly реализуется как
последовательная обработка каждого символа входного значения.
Обобщённый алгоритм:
[0-9]Ключевой момент заключается в том, что фильтрация происходит до
применения blocks, delimiter или других
форматирующих опций. Это обеспечивает предсказуемость результата
независимо от внешнего ввода.
При вставке строки из буфера обмена механизм фильтрации работает аналогично, но с некоторыми особенностями:
Пример поведения:
Вход:
"12a3-4 5b6"
После фильтрации:
"123456"
Далее эта строка передаётся в систему форматирования.
Важно учитывать, что numericOnly не является
форматирующим инструментом — он не добавляет разделители и не задаёт
структуру отображения. Его задача ограничена очисткой входных
данных.
Форматирование происходит отдельно, например:
blocksdelimiterТаким образом, цепочка обработки выглядит следующим образом:
сырой ввод → numericOnly-фильтр → форматирование → отображение
Особенность, которая часто вызывает неоднозначное поведение, связана
с символом -.
В режиме numericOnly:
-123 становится 123Это объясняется тем, что фильтрация ориентирована на строго числовой поток без математической интерпретации знаков.
Символ точки . также исключается из обработки:
12.34 преобразуется в 1234Это делает numericOnly непригодным для задач, где
требуется работа с плавающей точкой, если только не добавляется
дополнительная логика поверх Cleave.js.
В контексте локализованных чисел (например, где используются запятые как разделитель дробной части) поведение остаётся неизменным:
, удаляется как недопустимый символТаким образом, numericOnly работает независимо от
региональных стандартов форматирования.
Так как обработка представляет собой линейный проход по строке, сложность алгоритма составляет:
O(n), где n — длина входного значения.
Это делает фильтрацию предсказуемой даже при больших объёмах
вставляемого текста. Однако при частых input событиях в
высоконагруженных интерфейсах важно учитывать:
При одновременном использовании numericOnly и внешних
обработчиков ввода возможны конфликты:
onChange может получать уже очищенное
значениеЭто приводит к ситуации, когда визуальное поведение поля отличается от логики бизнес-валидации, если она не синхронизирована с Cleave.js.
Наиболее устойчивые сценарии использования
numericOnly:
В этих случаях фильтрация символов снижает необходимость дополнительной валидации на стороне приложения.
Архитектура numericOnly имеет принципиальные
ограничения:
Любые расширения поведения требуют либо отключения
numericOnly, либо построения кастомной логики поверх
событий ввода.
При редактировании уже введённого значения Cleave.js повторно применяет фильтрацию на каждом изменении:
Это поведение важно учитывать при реализации UX с точным позиционированием курсора.
Логическая модель работы numericOnly в Cleave.js
сводится к последовательному преобразованию:
Эта модель делает поведение предсказуемым, но одновременно ограничивает выразительность ввода, фиксируя его в строго числовом пространстве без дополнительных интерпретаций.