В библиотеке AutoNumeric управление допустимыми числовыми значениями строится вокруг конфигурации диапазона и правил форматирования ввода. Ограничения для положительных чисел задаются через комбинацию параметров, определяющих минимально допустимое значение, поведение отрицательных чисел, а также реакцию на ввод, выходящий за границы диапазона.
Ключевая идея заключается в том, что форматирование и валидация не отделены друг от друга: каждое изменение значения проходит через внутренний парсер, нормализатор и проверку границ. Это позволяет гарантировать, что в поле ввода не может оказаться значение, не соответствующее заданной числовой модели.
Ограничение на положительные числа чаще всего задаётся через минимальное значение диапазона:
const an = new AutoNumeric('#input', {
minimumValue: '0'
});
В этом случае любое значение ниже нуля либо предотвращается на этапе ввода, либо автоматически корректируется в зависимости от стратегии обработки.
Если требуется строго исключить отрицательные числа, дополнительно используется отключение отрицательного знака:
const an = new AutoNumeric('#input', {
minimumValue: '0',
allowDecimalPadding: true,
modifyValueOnWheel: false
});
Параметр minimumValue задаёт нижнюю границу числового
диапазона, а логика библиотеки обеспечивает соблюдение ограничения как
при вводе с клавиатуры, так и при программном изменении значения.
Для сценариев, где отрицательные числа не допускаются в принципе (например, цены, количества, проценты без отрицательных значений), применяется явное отключение отрицательного ввода:
const an = new AutoNumeric('#input', {
minimumValue: '0',
allowDecimalCharacter: true,
negativePositiveSignPlacement: 'p',
unformatOnSubmit: true
});
Хотя основной контроль остаётся за minimumValue,
отключение логики отрицательного знака позволяет избежать ситуаций,
когда пользователь вводит -, а затем значение
корректируется постфактум.
Внутренняя обработка AutoNumeric устроена так, что знак минус может быть интерпретирован как промежуточное состояние ввода. При строгих ограничениях это состояние либо блокируется, либо мгновенно нормализуется в ноль или минимальное допустимое значение.
Ограничение только на положительные числа часто дополняется верхним пределом:
const an = new AutoNumeric('#input', {
minimumValue: '0',
maximumValue: '1000'
});
Такая конфигурация задаёт замкнутый интервал [0, 1000].
Любое значение выше 1000 будет либо обрезано, либо скорректировано в
зависимости от настроек поведения.
Важная особенность заключается в том, что AutoNumeric не просто блокирует ввод, а стремится сохранить пользовательский контекст. Например, при вставке значения:
maximumValue, оно может быть
приведено к максимуму;minimumValue, оно становится равным
минимуму;Контроль диапазона в AutoNumeric работает на нескольких уровнях:
При превышении границ применяется стратегия нормализации. Она зависит от внутреннего состояния и версии конфигурации, но концептуально включает три модели:
Для положительных чисел наиболее распространён режим clamp, так как он обеспечивает предсказуемость интерфейса.
Хотя основной контроль положительности осуществляется через
minimumValue, параметр, управляющий отрицательным знаком,
влияет на UX-слой.
const an = new AutoNumeric('#input', {
minimumValue: '0',
allowNegative: false
});
При allowNegative: false библиотека:
-;В связке с minimumValue: '0' это создаёт жёсткое
ограничение диапазона, при котором отрицательные значения исключены на
всех уровнях обработки.
Особенность числовых полей заключается в том, что пользовательский ввод не всегда является валидным числом в момент редактирования. Например:
- как начало отрицательного числа;0. как промежуточное состояние десятичного
числа;-12abc.AutoNumeric поддерживает концепцию промежуточных состояний (partial input states), но при ограничении на положительные числа поведение меняется.
При minimumValue: '0':
- не переводится в промежуточное состояние
числа;-0 нормализуется в 0;Это важно для финансовых и расчётных интерфейсов, где недопустимо отображение временно некорректных отрицательных значений.
При использовании API библиотека сохраняет те же ограничения, что и при пользовательском вводе:
an.set(150);
an.set(-50); // будет приведено к 0 или minimumValue
Если задан диапазон:
{
minimumValue: '0',
maximumValue: '100'
}
то результат будет нормализован:
-50 → 0150 → 100Это поведение гарантирует целостность данных независимо от источника изменения.
Одним из самых частых источников некорректных значений является вставка текста. AutoNumeric применяет многоступенчатую обработку:
Для положительных чисел критично, что на этапе 2 отрицательный знак либо удаляется, либо делает значение нулевым в зависимости от конфигурации.
Пример:
-123 → 0abc45 → 459999 при maximumValue: 1000 →
1000Ограничения для положительных чисел тесно связаны с форматированием. Даже при строгом диапазоне библиотека продолжает отображать число в локализованном виде:
const an = new AutoNumeric('#input', {
minimumValue: '0',
digitGroupSeparator: ' ',
decimalCharacter: ','
});
Это означает, что ограничения применяются к числовой модели, а не к визуальному представлению.
Например:
0 отображается как 01000 отображается как 1 000-1 не может появиться ни в одном визуальном
форматеОграничения положительных чисел часто пересекаются с настройками точности:
const an = new AutoNumeric('#input', {
minimumValue: '0',
decimalPlaces: 2
});
Это означает, что диапазон применяется не только к целым значениям, но и к дробным.
Пример поведения:
-0.01 → 00.005 → 0.01 (после округления)100.999 → 101.00 (если не превышает maximumValue)Округление происходит до проверки диапазона или после неё в зависимости от внутреннего пайплайна обработки значения, но итог всегда соответствует ограничениям.
AutoNumeric позволяет изменять настройки после инициализации. При изменении диапазона выполняется немедленная ревалидация текущего значения:
an.update({
minimumValue: '10',
maximumValue: '500'
});
Если текущее значение не соответствует новым ограничениям, оно корректируется автоматически.
Пример:
5 → становится 10600 → становится 500Это важно при работе с динамическими формами, где ограничения зависят от внешних условий (например, выбора валюты или типа операции).
Ноль является пограничным случаем между положительными и отрицательными значениями. При настройке положительного диапазона он трактуется как допустимое значение:
minimumValue: '0' включает 0 в
диапазон;minimumValue: '0.01'.Таким образом формируется поведение:
0 может быть разрешёнЛогика работы строится на сочетании трёх уровней:
minimumValue, maximumValue)allowNegative, обработка
-)Эта трёхуровневая система обеспечивает устойчивое поведение числовых полей независимо от источника данных и сохраняет строгость положительных ограничений во всех сценариях взаимодействия с библиотекой.