В числовом форматировании строковое представление значения часто
содержит ведущие нули, возникающие при вводе данных пользователем или
при работе с внешними источниками. Параметр leadingZero в
AutoNumeric определяет стратегию обработки таких нулей при парсинге и
отображении чисел.
Ведущие нули появляются в следующих ситуациях:
000123"000045.67"AutoNumeric интерпретирует такие данные как числовое значение, но
итоговое отображение зависит от политики leadingZero.
Параметр поддерживает несколько режимов поведения, каждый из которых влияет на результат форматирования.
Режим allow сохраняет ведущие нули в значении до
момента, пока они не становятся незначимыми с точки зрения числа.
Поведение:
000123 отображается как 000123Используется в сценариях, где важна фиксация пользовательского ввода без агрессивной нормализации.
Режим deny полностью запрещает наличие ведущих нулей,
кроме случая нуля как самостоятельного значения.
Поведение:
000123 преобразуется в 1230000 преобразуется в 000045.60 становится 45.60Механизм применяется для строгой нормализации числовых значений, когда требуется гарантированная каноническая форма.
Режим keep сохраняет все ведущие нули в отображении до
тех пор, пока они не будут явно изменены пользователем или
переопределены программно.
Поведение:
000123 отображается как 000123Используется в интерфейсах, где важна стабильность отображения исходного ввода (например, учетные коды, идентификаторы, финансовые поля с фиксированным форматом).
Настройка leadingZero задается при создании экземпляра
AutoNumeric.
new AutoNumeric(element, {
leadingZero: 'allow'
});
Пример с жесткой нормализацией:
new AutoNumeric(element, {
leadingZero: 'deny'
});
Пример с сохранением исходного представления:
new AutoNumeric(element, {
leadingZero: 'keep'
});
При обработке строкового ввода AutoNumeric проходит несколько стадий:
leadingZeroНа этапе анализа ведущих нулей поведение определяется строго выбранным режимом, без учета локальных настроек формата.
Влияние leadingZero распространяется только на целую
часть числа. Десятичная часть обрабатывается независимо.
Примеры входных значений:
000123.450000.50000000.99Результат при разных режимах:
deny → 123.45, 0.50,
0.99allow → сохранение нулей в зависимости от
промежуточного состояния вводаkeep → сохранение исходной формы строкиЗначение нуля имеет отдельную семантику. Независимо от количества ведущих нулей результат должен быть эквивалентен нулю.
Вход:
0000000Результат:
0При этом режим keep может сохранять визуальное
представление до момента финализации значения, но числовая интерпретация
остается неизменной.
При редактировании значения в поле ввода поведение различается:
Поддерживает естественное накопление символов:
0 → 00 → 001 → 001Каждый ввод немедленно нормализуется:
0 → 000 → 001 → 1Сохраняется визуальная структура строки:
Параметр leadingZero работает совместно с
настройками:
decimalCharacterdigitGroupSeparatordecimalPlacesoutputFormatПри этом он имеет приоритет на этапе обработки целой части числа и выполняется до применения группировки разрядов.
Пример:
new AutoNumeric(element, {
leadingZero: 'deny',
digitGroupSeparator: ' ',
decimalCharacter: '.'
});
Ввод 0001234.56 даст результат
1 234.56.
При пустом вводе поведение leadingZero не применяется
напрямую, но может влиять на интерпретацию промежуточных состояний:
00. как начало дробного вводаВ таких случаях значение рассматривается как находящееся в режиме редактирования, и нормализация откладывается до завершения ввода.
При использовании метода установки значения строкой поведение зависит от режима:
anElement.set('000789');
Результаты:
deny → 789allow → 000789 (с возможной последующей
нормализацией)keep → 000789При установке числом:
anElement.set(789);
ведущие нули не участвуют в формировании значения, так как исходное представление отсутствует.
Различие режимов определяется не только отображением, но и моделью данных:
allow — компромиссный режим между вводом и
нормализациейdeny — строгая числовая модель без избыточного
представленияkeep — строко-ориентированная модель с сохранением
формы вводаВыбор режима влияет на то, считается ли значение числом с нормализованной формой или текстовым представлением числа с сохранением структуры ввода.