Ведущие нули

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

Базовая модель интерпретации нулей

При вводе значения AutoNumeric работает с промежуточной строкой, которая затем приводится к числу с учётом настроек локали, разделителей и ограничений. Ведущие нули — это символы '0', расположенные слева от первой значащей цифры в целой части числа.

Примеры исходного ввода:

  • 000123
  • 0010
  • 0000
  • 00045.67

Без специальных настроек библиотека нормализует такие значения, удаляя лишние нули или преобразуя их в каноническое представление числа.

Опция leadingZero

Ключевым механизмом управления является параметр leadingZero, который определяет стратегию обработки ведущих нулей.

Возможные режимы поведения

deny

Режим жёсткого удаления ведущих нулей. Любая последовательность нулей перед значащими цифрами устраняется.

Примеры поведения:

  • 000123123
  • 00000
  • 0004545

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

allow

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

Примеры поведения:

  • В процессе ввода: 000123
  • После blur или нормализации: 123

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

keep

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

Примеры поведения:

  • 000123000123
  • 00100010

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

Влияние на внутреннее значение

AutoNumeric разделяет два уровня представления:

  • rawValue — числовое значение без форматирования
  • formattedValue — строка, отображаемая пользователю

Ведущие нули влияют в основном на formattedValue. Даже в режиме keep внутреннее числовое значение остаётся нормализованным:

  • 000123 → rawValue: 123
  • formattedValue: 000123

Это разделение позволяет одновременно поддерживать строгую математическую корректность и визуальную точность ввода.

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

Пошаговый ввод

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

В режиме deny:

  • ввод 00
  • ввод 00 → остаётся 0
  • ввод 0011

В режиме allow:

  • ввод 00
  • ввод 00 → временно 00
  • ввод 001 → временно 001, затем нормализация

В режиме keep:

  • ввод 00
  • ввод 0000
  • ввод 001001

Удаление символов

Backspace и delete обрабатываются с учётом текущего состояния строки.

При удалении последнего значимого символа:

  • 0"" или 0 (в зависимости от emptyInputBehavior)
  • 000 или 00 (в режиме keep)

Вставка из буфера обмена

При вставке строк AutoNumeric предварительно очищает входные данные. Ведущие нули могут быть:

  • полностью удалены (deny)
  • временно сохранены (allow)
  • сохранены без изменений (keep)

Примеры вставки значения 0004500:

  • deny4500
  • allow4500 после нормализации
  • keep0004500

Особое внимание уделяется случаям, когда вставляемая строка содержит разделители тысяч или десятичные символы. В таких ситуациях ведущие нули обрабатываются после полной парсинг-нормализации.

Конфликт с минимальным значением

Опция minimumValue может влиять на итоговое представление числа с ведущими нулями.

Пример:

  • leadingZero = keep
  • minimumValue = 10

При вводе:

  • 0005 → нарушает минимум → корректируется до 10

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

Поведение с нулевыми значениями

Отдельный случай — значение ноль.

Особенности отображения:

  • 0000 → может быть преобразовано в 0
  • 0.00 → зависит от количества десятичных знаков
  • 000 в режиме keep → может сохраняться как 000, если нет нормализации

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

Влияние emptyInputBehavior

Если поле очищается до пустого состояния, взаимодействие с ведущими нулями может изменяться.

Типичные сценарии:

  • emptyInputBehavior = "zero" → пустой ввод становится 0
  • emptyInputBehavior = "null" → значение становится null
  • emptyInputBehavior = "focus" → отображение зависит от фокуса

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

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

При вызове методов установки значения:

anElement.set(000123);

или:

anElement.set("000123");

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

Поведение:

  • deny123
  • allow123 после нормализации
  • keep000123

Важно, что при передаче числового литерала ведущие нули в JavaScript уже отсутствуют, поэтому значимыми являются только строковые значения.

Форматирование при потере фокуса

Событие blur часто используется как точка финальной нормализации. Именно здесь режим allow чаще всего приводит к удалению ведущих нулей.

Сценарий:

  1. Ввод: 00078
  2. Фокус в поле
  3. Потеря фокуса
  4. Результат: 78

При keep формат сохраняется даже после blur, если не включены дополнительные правила форматирования.

Влияние decimalPlaces

Ведущие нули могут взаимодействовать с десятичной частью:

  • 00012.30
  • 0000.50

После обработки:

  • целая часть нормализуется или сохраняется
  • дробная часть остаётся фиксированной по количеству знаков

Примеры:

  • deny12.30
  • keep00012.30

Типичные ошибки конфигурации

Ожидание сохранения формата при deny

Частая ошибка — ожидание сохранения пользовательского формата при активном deny. Этот режим всегда приводит к нормализации и не предназначен для сохранения визуальной структуры ввода.

Использование keep для финансовых значений

Режим keep может приводить к некорректному восприятию суммы:

  • 0001000 визуально отличается от 1000, хотя численно эквивалентен

Это особенно критично в интерфейсах бухгалтерии и расчётов.

Игнорирование paste-обработки

Вставка данных часто обходится без учёта пользовательского ввода, что приводит к неожиданной нормализации уже «грязных» данных.

Комбинация с кастомными форматами

При использовании кастомных разделителей и локалей:

  • 1 000 000
  • 1.000.000
  • 1,000,000

ведущие нули обрабатываются до применения группировки разрядов. Это означает, что:

0001000 → сначала 1000 → затем форматирование 1 000

Итоговая модель поведения

Обработка ведущих нулей в AutoNumeric представляет собой многоступенчатый процесс:

  1. Захват ввода
  2. Очистка строки
  3. Удаление или сохранение ведущих нулей (в зависимости от режима)
  4. Преобразование в числовое значение
  5. Форматирование отображения
  6. Применение ограничений диапазона и формата
  7. Обновление поля ввода