Разделители в Inputmask используются для структурирования вводимых данных и обеспечения единообразного представления чисел, дат и других форматов, зависящих от локали. Они формируют визуальную и логическую границу между частями значения, не нарушая при этом внутреннюю модель данных, с которой работает маска.
В контексте Inputmask выделяются несколько классов разделителей:
Каждый из этих типов настраивается отдельно, но в реальных сценариях они часто работают совместно, формируя комплексную локализованную маску.
Группировка разрядов реализуется через параметры
groupSeparator и autoGroup. Первый определяет
символ-разделитель, второй включает автоматическую вставку разделителя
при вводе.
Inputmask("numeric", {
groupSeparator: " ",
autoGroup: true
}).mask("#number");
В данном случае числа формата 1000000 будут
автоматически преобразованы в 1 000 000.
Ключевым аспектом является то, что группировка не влияет на
внутреннее значение. Inputmask хранит «чистую» версию числа, удаляя
разделители при извлечении данных через unmaskedvalue.
Поведение группировки регулируется следующими параметрами:
autoGroup — автоматическая вставка разделителей;groupSeparator — символ разделителя;radixPoint — влияет на восприятие границы дробной
части;digits — количество знаков после запятой.Особое значение имеет совместная работа autoGroup и
rightAlign, так как выравнивание вправо может визуально
менять восприятие группировки, особенно при динамическом вводе.
Десятичный разделитель задаётся параметром radixPoint.
Он определяет символ, который отделяет целую часть числа от дробной.
Inputmask("numeric", {
radixPoint: ","
}).mask("#price");
При такой конфигурации ввод 12,5 интерпретируется как
число с дробной частью, а ввод 12.5 может быть либо
запрещён, либо преобразован в допустимый формат в зависимости от
настроек.
Поведение десятичного разделителя связано с:
digits — фиксированное количество знаков после
разделителя;digitsOptional — разрешение на отсутствие дробной
части;enforceDigitsOnBlur — принудительное форматирование при
потере фокуса.Особое внимание уделяется ситуации, когда пользователь вводит разделитель вручную. Inputmask должен корректно различать ввод символа как часть числа и как триггер перехода в дробную часть.
Локализация в Inputmask достигается комбинацией параметров, имитирующих поведение региональных стандартов. Несмотря на отсутствие полноценной системы i18n, можно реализовать поддержку различных форматов через конфигурацию:
groupSeparatorradixPointdigitsautoGroupПример конфигурации для европейского формата:
Inputmask("numeric", {
groupSeparator: ".",
radixPoint: ",",
autoGroup: true,
digits: 2
}).mask("#amount");
И для англоязычного формата:
Inputmask("numeric", {
groupSeparator: ",",
radixPoint: ".",
autoGroup: true,
digits: 2
}).mask("#amount");
Несмотря на внешнюю схожесть, различие в одном символе радикально влияет на восприятие данных пользователем и корректность серверной обработки.
Локализация также затрагивает поведение вставки данных из буфера обмена. Inputmask пытается интерпретировать входную строку, учитывая текущие символы разделителей, что особенно важно при мульти-региональных приложениях.
Валютные маски используют те же принципы, что и числовые, но добавляют префиксы и более строгие правила форматирования.
Inputmask("currency", {
prefix: "$ ",
groupSeparator: ",",
radixPoint: ".",
digits: 2,
autoGroup: true
}).mask("#salary");
Разделители в валютных масках выполняют не только визуальную функцию, но и помогают предотвратить ошибки ввода:
Важным аспектом является взаимодействие prefix с
группировкой. Префикс не должен попадать в числовую часть, поэтому
Inputmask отделяет его логически, несмотря на визуальную
связанность.
В масках дат разделители играют структурную роль, определяя границы между компонентами:
Inputmask("datetime", {
inputFormat: "dd.mm.yyyy",
placeholder: "dd.mm.yyyy"
}).mask("#date");
В этом случае символ . является фиксированным
разделителем между частями даты.
Поддерживаются различные варианты:
dd/mm/yyyyyyyy-mm-dddd-mm-yyyyРазделители могут быть как статическими, так и адаптивными, если используется кастомная маска.
Для времени:
Inputmask("datetime", {
inputFormat: "HH:MM:ss"
}).mask("#time");
Символ : выступает как разделитель временных
компонентов. Он фиксирует структуру ввода и предотвращает смещение
значений при частичном вводе.
Inputmask позволяет полностью переопределять поведение символов через
definitions, что напрямую влияет на работу
разделителей.
Inputmask.extendDefinitions({
"~": {
validator: "[0-9]",
definitionSymbol: "~"
}
});
Хотя definitions чаще используются для шаблонных
символов, они также могут взаимодействовать с разделителями, особенно
при создании сложных масок, где символ-разделитель является частью
шаблона.
Переопределение позволяет:
Одним из ключевых механизмов работы разделителей является автоматическое форматирование при вводе.
Inputmask отслеживает ввод каждого символа и пересчитывает позицию разделителей в реальном времени. Это включает:
Особенно важен механизм восстановления позиции курсора, так как вставка разделителя не должна сбивать поток ввода. Для этого Inputmask использует внутренние вычисления смещения индекса символов.
В реальных приложениях работа разделителей проявляется в нескольких типовых сценариях.
Финансовые формы требуют строгой фиксации:
Inputmask("numeric", {
groupSeparator: " ",
radixPoint: ".",
digits: 2,
autoGroup: true,
rightAlign: false
}).mask(".finance-input");
Системы учёта часто используют локальные стандарты:
Inputmask("numeric", {
groupSeparator: ".",
radixPoint: ",",
digits: 3,
autoGroup: true
}).mask(".accounting-input");
Формы ввода дат в административных интерфейсах требуют жёсткой структуры:
Inputmask("datetime", {
inputFormat: "yyyy-mm-dd",
separator: "-"
}).mask(".date-input");
В каждом случае разделители выступают не просто визуальным элементом, а частью строгой структуры данных, обеспечивающей корректную интерпретацию пользовательского ввода на уровне приложения и сервера.