В Inputmask числовой формат строится вокруг специализированного
алиаса numeric, который активирует набор правил для
обработки целых и дробных значений, разделителей, знаков и группировки
разрядов. В отличие от символьных масок фиксированной длины, числовые
маски оперируют не позицией символа, а логикой представления числа.
Основной принцип работы заключается в том, что вводимое значение не просто ограничивается шаблоном, а нормализуется в соответствии с правилами форматирования: разбиение на группы, управление дробной частью, контроль допустимого диапазона и обработка локальных особенностей записи чисел.
Базовая инициализация числовой маски строится вокруг объекта конфигурации:
Inputmask({
alias: "numeric"
}).mask(selector);
В этом режиме библиотека переключается в числовой парсер и начинает интерпретировать ввод как число, а не как строку фиксированного формата.
Одним из ключевых параметров числового формата является количество допустимых знаков после разделителя.
Параметр digits определяет фиксированную или
максимальную точность дробной части:
Inputmask({
alias: "numeric",
digits: 2
}).mask(selector);
При таком значении ввод ограничивается двумя знаками после разделителя. Любые дополнительные символы либо игнорируются, либо корректируются в зависимости от режима обработки.
Гибкость дробной части задаётся через digitsOptional.
Этот параметр управляет обязательностью заполнения дробной части:
Inputmask({
alias: "numeric",
digits: 2,
digitsOptional: true
}).mask(selector);
При включённой опции допускаются числа как с дробной частью, так и без неё. В противном случае дробная часть становится обязательной, и формат требует строгого соответствия.
Числовые форматы различаются в зависимости от региональных стандартов: точка, запятая и другие символы используются как разделители.
Параметр radixPoint задаёт символ разделения целой и
дробной части:
Inputmask({
alias: "numeric",
digits: 2,
radixPoint: "."
}).mask(selector);
Для регионов с запятой используется альтернативная конфигурация:
Inputmask({
alias: "numeric",
digits: 2,
radixPoint: ","
}).mask(selector);
Inputmask автоматически учитывает позицию разделителя и предотвращает некорректное размещение дробных значений.
Числа с большим количеством разрядов часто требуют визуального разделения для улучшения читаемости.
Параметры groupSeparator и autoGroup
отвечают за разбиение числа на группы:
Inputmask({
alias: "numeric",
groupSeparator: " ",
autoGroup: true
}).mask(selector);
В этом случае число 1000000 будет отображено как
1 000 000.
Для альтернативных локалей часто используется запятая:
Inputmask({
alias: "numeric",
groupSeparator: ",",
autoGroup: true
}).mask(selector);
Механизм группировки работает динамически: при вводе каждого нового символа пересчитываются границы разрядов, и отображение обновляется без необходимости ручного форматирования.
Числовая маска поддерживает обработку отрицательных значений через
параметр allowMinus.
Inputmask({
alias: "numeric",
allowMinus: true
}).mask(selector);
При включённой опции допускается ввод символа -, который
закрепляется в начале строки. Внутренняя логика предотвращает появление
знака в других позициях.
При отключённой опции любые попытки ввода отрицательного значения игнорируются.
Контроль диапазона реализуется через параметры min и
max. Эти значения определяют допустимые границы числового
ввода.
Inputmask({
alias: "numeric",
min: 0,
max: 100
}).mask(selector);
При такой конфигурации любые значения ниже нуля или выше ста автоматически корректируются или блокируются в зависимости от режима ввода.
Диапазон работает совместно с дробной частью:
Inputmask({
alias: "numeric",
min: 0,
max: 10,
digits: 2
}).mask(selector);
Это позволяет ограничивать, например, процентные значения с точностью до сотых.
Параметр rightAlign влияет на визуальное расположение
числа внутри поля ввода:
Inputmask({
alias: "numeric",
rightAlign: false
}).mask(selector);
При значении false число вводится слева направо, что
ближе к классическому поведению текстовых полей.
При true (значение по умолчанию во многих конфигурациях)
число визуально прижимается к правому краю, что имитирует поведение
калькуляторов и финансовых интерфейсов.
Числовые маски могут автоматически управлять ведущими нулями. В зависимости от конфигурации они либо сохраняются, либо удаляются.
Пример нормализации:
000123123Поведение зависит от сочетания autoGroup,
rightAlign и внутренней нормализации значения. В числовом
режиме библиотека стремится к приведению строки к каноническому виду
числа.
Inputmask не просто фильтрует ввод, а пересобирает строку после каждого изменения. При числовом формате это включает несколько этапов:
digitsmin/maxgroupSeparatorЭта цепочка обеспечивает предсказуемое поведение даже при сложных сценариях ввода, включая вставку текста из буфера обмена.
В некоторых конфигурациях числовая маска допускает ввод значений в научной нотации, однако это поведение требует явного контроля и часто отключается в прикладных сценариях.
При включённой поддержке экспоненциальной формы ввод вида
1e6 интерпретируется как число и преобразуется в
стандартный формат отображения.
Финансовые интерфейсы требуют строгого контроля точности и отображения.
Типичная конфигурация:
Inputmask({
alias: "numeric",
digits: 2,
digitsOptional: false,
groupSeparator: " ",
autoGroup: true,
radixPoint: ".",
allowMinus: false,
rightAlign: true
}).mask(selector);
Такая настройка обеспечивает:
При вставке значений из буфера обмена Inputmask применяет тот же пайплайн нормализации, что и при ручном вводе. Это предотвращает попадание некорректных символов и автоматически приводит строку к допустимому формату.
Пример поведения:
1,000.56781 000.56 при digits: 2 и
groupSeparator: " "Любые лишние символы, включая буквы и спецзнаки, отбрасываются на этапе парсинга.
Числовой формат часто используется как базовый слой для расширенных алиасов, где поверх стандартной логики добавляются дополнительные правила:
Пример расширения для процентов:
Inputmask({
alias: "numeric",
suffix: "%",
digits: 1,
max: 100
}).mask(selector);
Суффикс добавляется поверх числовой логики и не участвует в вычислениях значения.
В процессе работы Inputmask приводит все значения к внутреннему числовому представлению, но сохраняет строковый формат для отображения. Это различие критично:
Такая архитектура позволяет избежать ошибок округления и несоответствий при последовательных изменениях ввода.
При незавершённом вводе маска сохраняет промежуточное состояние:
12. при ожидании дробной части0. при начале дробного ввода- как промежуточное состояние отрицательного числаЭти состояния считаются валидными на уровне ввода, но не обязательно
проходят проверку isComplete, если она используется
валидационной логикой приложения.
При конфликте настроек применяется следующая логика приоритета:
min/max имеют высший приоритет над форматированиемdigits ограничивает дробную часть до применения
отображенияgroupSeparator применяется только после нормализации
числаrightAlign влияет исключительно на визуальный слойsuffix/prefix не участвуют в числовой логикеТакое разделение позволяет комбинировать параметры без потери предсказуемости поведения.
Любые символы, не относящиеся к числовому формату, игнорируются. При попытке вставки строки с буквами Inputmask извлекает только числовые компоненты.
Пример:
12ab34,561234.56 (при соответствующей конфигурации
разделителя)Если число выходит за пределы допустимого диапазона, оно корректируется либо блокируется в зависимости от режима обработки, заданного в конфигурации маски.