Поведение при вводе букв

AutoNumeric перехватывает ввод пользователя в input-элементах и преобразует его в числовое значение согласно заданной конфигурации. Одним из ключевых аспектов работы библиотеки является реакция на недопустимые символы, включая буквы. Поведение при вводе букв определяется набором правил фильтрации, обработчиков событий клавиатуры и внутренним механизмом нормализации значения.

При активированной маске AutoNumeric input-элемент перестаёт быть обычным текстовым полем с произвольным вводом. Каждое нажатие клавиши проходит через слой проверки:

  1. Перехват события клавиатуры (keydown, частично keypress в устаревших режимах).
  2. Проверка символа на допустимость в числовом контексте.
  3. Либо добавление символа в буфер ввода, либо его игнорирование.
  4. Пересчёт и переформатирование значения.

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

Фильтрация буквенных символов

AutoNumeric использует строгую фильтрацию входных данных. Любой символ, не являющийся:

  • цифрой 0–9,
  • разделителем дробной части (например, . или , в зависимости от локали),
  • знаком отрицательного числа (если разрешён конфигурацией),
  • управляющей клавишей (Backspace, Delete, ArrowLeft/Right),

рассматривается как запрещённый.

Буквы латинского алфавита, кириллицы и любые Unicode-символы категорий Letter автоматически блокируются.

Поведение при keydown

На этапе keydown происходит первичная проверка кода клавиши:

  • если клавиша соответствует буквам (KeyA–KeyZ или локализованные варианты), событие может быть предотвращено через event.preventDefault();
  • если событие не предотвращено, символ всё равно не проходит последующую валидацию и отбрасывается при финальной обработке.

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

Обработка input события

Некоторые браузеры или устройства могут вставлять символы не через клавиатурные события, а напрямую в значение поля. В этом случае AutoNumeric реагирует на событие input:

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

Любые буквы, попавшие в значение, удаляются на этом этапе.

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

Особое внимание уделяется вставке текста (paste). Пользователь может попытаться вставить строку, содержащую буквы, например:

  • 123abc
  • €45x.67
  • -12e5

AutoNumeric обрабатывает вставку следующим образом:

  1. Перехватывается событие paste.
  2. Из буфера извлекается текст.
  3. Применяется очистка по числовому фильтру.
  4. Оставшиеся допустимые символы преобразуются в число.

Пример поведения при вставке

Входная строка:

1a2b3c4

После фильтрации:

1234

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

Особые случаи буквенных символов

Научная нотация (e, E)

Исключением из общего правила является символ e или E, используемый в экспоненциальной записи чисел (например, 1e5). Поддержка такого формата зависит от конфигурации:

  • при включённой опции научной нотации символ e допускается;
  • в противном случае он обрабатывается как обычная буква и удаляется.

Таким образом, поведение не является фиксированным и определяется настройками экземпляра AutoNumeric.

Локализованные IME-вводы

При использовании методов ввода восточноазиатских языков (IME) символы могут временно находиться в промежуточном состоянии. AutoNumeric обрабатывает такие случаи через дополнительные события (compositionstart, compositionend):

  • во время композиции ввод не фиксируется;
  • после завершения композиции значение нормализуется;
  • буквенные или логографические символы отбрасываются, если они не могут быть интерпретированы как часть числа.

Влияние конфигурации

Поведение при вводе букв частично зависит от параметров инициализации AutoNumeric.

Основные параметры, влияющие на фильтрацию

  • allowDecimalPadding — не влияет на буквы, но участвует в финальном форматировании;
  • decimalCharacter — определяет допустимый символ дробной части;
  • negativeSignCharacter — задаёт символ отрицания;
  • decimalPlaces — ограничивает точность, но не влияет на фильтрацию букв;
  • allowLeadingZeros — не влияет на буквенные символы;
  • formulaMode (если используется) — может расширять допустимые символы, но в стандартной конфигурации буквы остаются запрещёнными.

Режим полной строгости

В строгих режимах (по умолчанию или при явной настройке) любые попытки ввода букв приводят к:

  • полному игнорированию символа;
  • отсутствию изменений в значении поля;
  • отсутствию визуальной реакции, кроме возможного кратковременного отклонения ввода.

Поведение при программном изменении значения

Если значение устанавливается программно через API:

autoNumericInstance.set("abc123");

AutoNumeric не принимает строку как есть. Вместо этого:

  1. выполняется парсинг строки;
  2. удаляются все нечисловые символы;
  3. остаётся только валидная числовая часть;
  4. результат приводится к числу и форматируется.

В данном примере итоговое значение будет интерпретировано как 123, если это допустимо конфигурацией.

Валидация и финальная нормализация

После любого типа ввода (клавиатура, вставка, программное изменение) AutoNumeric выполняет финальный этап нормализации:

  • удаление всех символов, не входящих в числовой алфавит;
  • приведение разделителей к единому формату;
  • контроль диапазона значений (если задан);
  • форматирование вывода.

Буквы полностью исключаются на этом этапе без исключений (за исключением заранее разрешённых специальных символов вроде e в научной нотации).

Влияние на UX и особенности поведения

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

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

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

Сводная модель обработки букв

Поведение AutoNumeric при вводе букв можно представить как последовательный конвейер:

  1. Захват события ввода.
  2. Проверка символа.
  3. Отбрасывание букв на раннем этапе (keydown/paste).
  4. Очистка на этапе input.
  5. Финальная нормализация.
  6. Форматирование числа.

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