Обработка отрицательных значений в масках ввода опирается на расширение числового алиаса, в котором учитывается возможность присутствия знака минус и корректная интерпретация его положения относительно числовой части. В библиотеке масок это реализуется через режим числового формата, где ввод трактуется не как произвольная строка, а как структурированное значение с правилами для знаков, разделителей и диапазонов.
В числовом алиасе включение отрицательных значений определяется параметром, разрешающим использование символа отрицания. В этом режиме ввод перестаёт быть линейной строкой и превращается в модель, где знак минус является отдельным элементом структуры значения.
Inputmask({
alias: "numeric",
allowMinus: true
}).mask(input);
При такой конфигурации символ минуса становится допустимым только в соответствии с правилами позиции: он может располагаться в начале числа, а также участвовать в преобразовании значения при редактировании и вставке.
Ключевой момент заключается в том, что минус не рассматривается как обычный символ. Он отделяется от числового ядра и обрабатывается на уровне нормализации значения.
При активной маске числового типа обработка символа минуса зависит от текущего положения каретки и состояния поля. Если ввод начинается с минуса, значение интерпретируется как отрицательное число, даже если числовая часть ещё не задана.
При вводе внутри строки поведение может корректироваться автоматически:
Подобная логика предотвращает появление некорректных комбинаций вроде нескольких отрицательных символов или их размещения внутри числа.
Внутреннее представление отрицательного числа в маске проходит стадию нормализации. Вводимые данные приводятся к единому формату, где:
Inputmask({
alias: "numeric",
allowMinus: true,
digits: 2,
radixPoint: "."
}).mask(input);
При такой настройке значение вида -00012.30
преобразуется в структурированное представление -12.30,
даже если пользователь вводил данные в несокращённой форме.
При необходимости контроля диапазона используется сочетание параметров минимального и максимального значения. Это позволяет ограничить не только верхнюю, но и нижнюю границу отрицательных значений.
Inputmask({
alias: "numeric",
allowMinus: true,
min: -100,
max: 100
}).mask(input);
В этом случае любые попытки ввести значение ниже допустимого порога приводят к автоматической коррекции ввода или блокировке лишних символов. Если вводимое число выходит за пределы диапазона, маска приводит его к ближайшему допустимому значению.
Особенность обработки отрицательных диапазонов заключается в том, что сравнение выполняется после нормализации строки в числовой формат, а не на уровне символов.
Отдельное внимание уделяется состояниям, связанным с нулём. При
использовании отрицательных чисел возможно появление промежуточного
состояния -0, которое возникает в процессе
редактирования.
В маске такое значение не трактуется как отдельное математическое
число, а рассматривается как временная форма ввода. При завершении ввода
оно обычно нормализуется в 0 либо -0 в
зависимости от конфигурации и последующих операций.
Поведение определяется тем, как реализована финальная очистка значения:
При использовании отрицательных чисел дробная часть сохраняет независимую структуру. Минус влияет только на знак всего числа, не затрагивая разделение целой и дробной части.
Inputmask({
alias: "numeric",
allowMinus: true,
digits: 3,
radixPoint: ","
}).mask(input);
Ввод -12,345 интерпретируется как единое значение,
где:
- задаёт знак числа;12 формирует целую часть;345 формирует дробную часть.Разделитель дробной части не конкурирует с символом минуса и не влияет на его позиционирование.
При вставке текста из внешнего источника маска выполняет анализ строки. Если в данных присутствует знак отрицания, он извлекается и применяется к числовому значению независимо от позиции в исходной строке.
Примеры обработанных вставок:
"-45.6" → корректное отрицательное число;"45.6-" → нормализация к -45.6 или
45.6 в зависимости от политики;"--45" → устранение дублирующих символов и
преобразование к -45.Алгоритм очистки ориентируется на первую валидную интерпретацию знака и игнорирует избыточные символы.
В сложных сценариях возможно переопределение правил обработки отрицательного знака через низкоуровневые параметры маски. Это позволяет изменять:
При необходимости можно реализовать поведение, при котором знак минуса фиксируется только как префикс и не может быть изменён после ввода первой цифры, либо наоборот — допускается переключение знака в любом состоянии поля.
При включённом автоформатировании отрицательные числа подчиняются тем же правилам форматирования, что и положительные, но с дополнительным учётом знака. Группировка разрядов, разделители тысяч и дробные части применяются к модулю числа, тогда как знак выводится отдельно.
Это приводит к стабильному визуальному представлению:
-1000000 → -1 000 000-1234.56 → -1 234.56Знак остаётся фиксированным и не участвует в группировке, что исключает неоднозначность отображения.
При редактировании отрицательных чисел маска оперирует промежуточными состояниями, которые не всегда соответствуют финальному числовому значению. Такие состояния необходимы для корректного UX при вводе:
- как самостоятельное значение;-0 как промежуточная форма;-1. как этап ввода дробной части.Эти состояния сохраняются до тех пор, пока ввод не будет завершён или преобразован в валидное число.
Подобная модель обеспечивает непрерывность редактирования без потери контекста, позволяя пользователю изменять знак и структуру числа без разрушения текущего ввода.