leadingZero

В числовом форматировании строковое представление значения часто содержит ведущие нули, возникающие при вводе данных пользователем или при работе с внешними источниками. Параметр leadingZero в AutoNumeric определяет стратегию обработки таких нулей при парсинге и отображении чисел.


Логика обработки ведущих нулей

Ведущие нули появляются в следующих ситуациях:

  • ввод значения вручную: 000123
  • копирование из внешних систем: "000045.67"
  • программная установка значения строкой
  • частичное редактирование пользователем

AutoNumeric интерпретирует такие данные как числовое значение, но итоговое отображение зависит от политики leadingZero.


Режимы работы leadingZero

Параметр поддерживает несколько режимов поведения, каждый из которых влияет на результат форматирования.

allow

Режим allow сохраняет ведущие нули в значении до момента, пока они не становятся незначимыми с точки зрения числа.

Поведение:

  • ввод 000123 отображается как 000123
  • после преобразования в число может сохраняться визуально в зависимости от других настроек
  • поддерживает промежуточное состояние ввода

Используется в сценариях, где важна фиксация пользовательского ввода без агрессивной нормализации.


deny

Режим deny полностью запрещает наличие ведущих нулей, кроме случая нуля как самостоятельного значения.

Поведение:

  • 000123 преобразуется в 123
  • 0000 преобразуется в 0
  • 00045.60 становится 45.60

Механизм применяется для строгой нормализации числовых значений, когда требуется гарантированная каноническая форма.


keep

Режим keep сохраняет все ведущие нули в отображении до тех пор, пока они не будут явно изменены пользователем или переопределены программно.

Поведение:

  • 000123 отображается как 000123
  • при последующих изменениях нули сохраняются
  • при частичном редактировании сохраняется структура строки

Используется в интерфейсах, где важна стабильность отображения исходного ввода (например, учетные коды, идентификаторы, финансовые поля с фиксированным форматом).


Инициализация параметра

Настройка leadingZero задается при создании экземпляра AutoNumeric.

new AutoNumeric(element, {
    leadingZero: 'allow'
});

Пример с жесткой нормализацией:

new AutoNumeric(element, {
    leadingZero: 'deny'
});

Пример с сохранением исходного представления:

new AutoNumeric(element, {
    leadingZero: 'keep'
});

Влияние на процесс парсинга

При обработке строкового ввода AutoNumeric проходит несколько стадий:

  1. очистка символов форматирования
  2. выделение числовой части
  3. анализ ведущих нулей
  4. применение политики leadingZero
  5. финальное форматирование отображения

На этапе анализа ведущих нулей поведение определяется строго выбранным режимом, без учета локальных настроек формата.


Взаимодействие с десятичной частью

Влияние leadingZero распространяется только на целую часть числа. Десятичная часть обрабатывается независимо.

Примеры входных значений:

  • 000123.45
  • 0000.50
  • 000000.99

Результат при разных режимах:

  • deny123.45, 0.50, 0.99
  • allow → сохранение нулей в зависимости от промежуточного состояния ввода
  • keep → сохранение исходной формы строки

Особый случай нуля

Значение нуля имеет отдельную семантику. Независимо от количества ведущих нулей результат должен быть эквивалентен нулю.

Вход:

  • 0
  • 00
  • 0000

Результат:

  • 0

При этом режим keep может сохранять визуальное представление до момента финализации значения, но числовая интерпретация остается неизменной.


Влияние на пользовательский ввод

При редактировании значения в поле ввода поведение различается:

allow

Поддерживает естественное накопление символов:

  • ввод 00
  • ввод следующего 000
  • ввод 1001

deny

Каждый ввод немедленно нормализуется:

  • 00
  • 000
  • 011

keep

Сохраняется визуальная структура строки:

  • ввод сохраняет формат до явной нормализации
  • редактирование не приводит к мгновенному сокращению нулей

Совместимость с форматированием

Параметр leadingZero работает совместно с настройками:

  • decimalCharacter
  • digitGroupSeparator
  • decimalPlaces
  • outputFormat

При этом он имеет приоритет на этапе обработки целой части числа и выполняется до применения группировки разрядов.

Пример:

new AutoNumeric(element, {
    leadingZero: 'deny',
    digitGroupSeparator: ' ',
    decimalCharacter: '.'
});

Ввод 0001234.56 даст результат 1 234.56.


Обработка пустых и промежуточных значений

При пустом вводе поведение leadingZero не применяется напрямую, но может влиять на интерпретацию промежуточных состояний:

  • пустая строка
  • одиночный 0
  • 0. как начало дробного ввода

В таких случаях значение рассматривается как находящееся в режиме редактирования, и нормализация откладывается до завершения ввода.


Программная установка значений

При использовании метода установки значения строкой поведение зависит от режима:

anElement.set('000789');

Результаты:

  • deny789
  • allow000789 (с возможной последующей нормализацией)
  • keep000789

При установке числом:

anElement.set(789);

ведущие нули не участвуют в формировании значения, так как исходное представление отсутствует.


Практическая семантика режимов

Различие режимов определяется не только отображением, но и моделью данных:

  • allow — компромиссный режим между вводом и нормализацией
  • deny — строгая числовая модель без избыточного представления
  • keep — строко-ориентированная модель с сохранением формы ввода

Выбор режима влияет на то, считается ли значение числом с нормализованной формой или текстовым представлением числа с сохранением структуры ввода.