Работа с числовыми значениями в веб-интерфейсах требует не только корректного форматирования ввода, но и строгого контроля над разделителями. Библиотека Inputmask предоставляет гибкий механизм настройки отображения и ввода чисел, включая групповые разделители разрядов, десятичные символы и локализованные форматы.
Ключевая идея настройки разделителей в Inputmask заключается в разделении логики отображения и фактического значения, которое извлекается из поля ввода. Пользователь видит форматированное число, тогда как в модели данных сохраняется «чистое» значение без визуальных символов.
Разделитель групп разрядов используется для визуального упрощения больших чисел. Например:
В Inputmask за этот функционал отвечает параметр
groupSeparator.
Inputmask({
alias: "numeric",
groupSeparator: ","
}).mask("#amount");
При вводе числа библиотека автоматически вставляет разделитель после каждой группы цифр (обычно по три символа справа налево).
Десятичный разделитель задаётся через параметр
radixPoint. Он определяет символ, отделяющий целую часть
числа от дробной.
Наиболее распространённые варианты:
. — англосаксонский формат (12.34), — европейский формат (12,34)Inputmask({
alias: "numeric",
radixPoint: "."
}).mask("#price");
Важно учитывать, что radixPoint влияет не только на
отображение, но и на интерпретацию вводимых данных. При его изменении
Inputmask перестраивает логику парсинга строки.
Параметр autoGroup управляет автоматическим добавлением
разделителей групп.
Inputmask({
alias: "numeric",
groupSeparator: " ",
autoGroup: true
}).mask("#sum");
При включённом autoGroup библиотека:
Если autoGroup отключён, символы разделителя не
вставляются автоматически, даже если groupSeparator
задан.
Чаще всего работа с разделителями реализуется через алиас
"numeric", который уже включает базовую логику числовой
маски.
Основные параметры, влияющие на разделители:
groupSeparator — символ группировки разрядовradixPoint — десятичный разделительautoGroup — включение авторазбиенияdigits — количество знаков после запятойdigitsOptional — опциональность дробной частиПример комплексной конфигурации:
Inputmask({
alias: "numeric",
groupSeparator: " ",
radixPoint: ",",
autoGroup: true,
digits: 2,
digitsOptional: false
}).mask("#value");
В этом случае число будет отображаться в формате:
1 234 567,89
Разные регионы используют разные правила форматирования:
| Регион | Разделитель групп | Десятичный символ |
|---|---|---|
| США | , |
. |
| ЕС | . или пробел |
, |
| СНГ | пробел | , |
Inputmask не выполняет автоматическую локализацию по умолчанию, поэтому все символы задаются вручную.
Пример настройки под русскую локаль:
Inputmask({
alias: "numeric",
groupSeparator: " ",
radixPoint: ",",
autoGroup: true
}).mask("#ruNumber");
Одним из ключевых аспектов является различие между отображаемым и «сырым» значением.
При включённых разделителях:
1 000 000,50
Фактическое значение (unmasked):
1000000.50
Это поведение контролируется внутренним парсером Inputmask, который:
groupSeparator;radixPoint в стандартный формат;Inputmask позволяет задавать любые символы в качестве разделителей, включая нестандартные.
Inputmask({
alias: "numeric",
groupSeparator: "'",
autoGroup: true
}).mask("#chf");
Результат:
1'000'000
Также допустимы пробелы, символы Unicode и визуальные маркеры:
Inputmask({
alias: "numeric",
groupSeparator: "·",
radixPoint: "·"
}).mask("#custom");
Если groupSeparator совпадает с radixPoint,
поведение становится неоднозначным. Например:
groupSeparator: ",",
radixPoint: ","
Такая конфигурация приводит к невозможности различить дробную часть и группы разрядов.
При отсутствии digits и radixPoint дробная
часть полностью отключается, и разделители работают только для целой
части.
Inputmask({
alias: "numeric",
groupSeparator: " ",
autoGroup: true
}).mask("#integerOnly");
При обратном удалении символов Inputmask:
Количество дробных знаков напрямую влияет на отображение разделителей:
Inputmask({
alias: "numeric",
groupSeparator: ",",
radixPoint: ".",
digits: 4
}).mask("#precision");
Пример результата:
12,345.6789
Если включён digitsOptional, дробная часть становится
необязательной:
Inputmask({
alias: "numeric",
groupSeparator: " ",
radixPoint: ",",
digits: 2,
digitsOptional: true
}).mask("#optional");
Возможные вводы:
1000
1000,5
1000,50
При установке значения через JavaScript Inputmask применяет те же правила форматирования:
const el = document.querySelector("#amount");
Inputmask({
alias: "numeric",
groupSeparator: " ",
radixPoint: ",",
autoGroup: true
}).mask(el);
el.inputmask.setValue("1000000.25");
Отображаемый результат:
1 000 000,25
При работе с длинными числами (10+ цифр) механизм разделителей может вызывать дополнительные перерасчёты строки. Inputmask оптимизирует процесс за счёт:
Тем не менее, при массовом вводе (например, таблицы финансовых данных) рекомендуется избегать избыточных кастомных символов и сложных локализаций.
Inputmask({
autoGroup: true,
groupSeparator: "",
radixPoint: "."
});
Пустой groupSeparator фактически отключает визуальную
группировку, даже при включённом autoGroup.
При использовании mask: "decimal" или пользовательских
паттернов часть логики numeric может быть переопределена, и
разделители перестают работать автоматически.
Если не указан radixPoint, Inputmask может использовать
значение по умолчанию, зависящее от версии и конфигурации, что приводит
к неоднородному поведению между окружениями.
При обработке ввода Inputmask выполняет последовательные шаги:
groupSeparatorradixPoint на стандартный символ
.digitsЭта цепочка обеспечивает независимость логики от визуального представления числа и делает поведение предсказуемым при любых настройках разделителей.