AutoNumeric перехватывает ввод пользователя в input-элементах и преобразует его в числовое значение согласно заданной конфигурации. Одним из ключевых аспектов работы библиотеки является реакция на недопустимые символы, включая буквы. Поведение при вводе букв определяется набором правил фильтрации, обработчиков событий клавиатуры и внутренним механизмом нормализации значения.
При активированной маске AutoNumeric input-элемент перестаёт быть обычным текстовым полем с произвольным вводом. Каждое нажатие клавиши проходит через слой проверки:
keydown, частично
keypress в устаревших режимах).Буквы относятся к категории полностью недопустимых символов в числовом режиме, за исключением служебных кейсов (например, комбинации клавиш управления, горячие клавиши браузера и системные команды).
AutoNumeric использует строгую фильтрацию входных данных. Любой символ, не являющийся:
0–9,. или
, в зависимости от локали),рассматривается как запрещённый.
Буквы латинского алфавита, кириллицы и любые Unicode-символы категорий Letter автоматически блокируются.
keydownНа этапе keydown происходит первичная проверка кода
клавиши:
KeyA–KeyZ или
локализованные варианты), событие может быть предотвращено через
event.preventDefault();Таким образом, даже при обходных сценариях (виртуальные клавиатуры, IME) буквенные символы не становятся частью числового значения.
input
событияНекоторые браузеры или устройства могут вставлять символы не через
клавиатурные события, а напрямую в значение поля. В этом случае
AutoNumeric реагирует на событие input:
Любые буквы, попавшие в значение, удаляются на этом этапе.
Особое внимание уделяется вставке текста (paste).
Пользователь может попытаться вставить строку, содержащую буквы,
например:
123abc€45x.67-12e5AutoNumeric обрабатывает вставку следующим образом:
paste.Входная строка:
1a2b3c4
После фильтрации:
1234
Если в строке присутствуют разделители или локальные символы валют, они также удаляются, если не предусмотрены конфигурацией.
Исключением из общего правила является символ e или
E, используемый в экспоненциальной записи чисел (например,
1e5). Поддержка такого формата зависит от конфигурации:
e
допускается;Таким образом, поведение не является фиксированным и определяется настройками экземпляра AutoNumeric.
При использовании методов ввода восточноазиатских языков (IME)
символы могут временно находиться в промежуточном состоянии. AutoNumeric
обрабатывает такие случаи через дополнительные события
(compositionstart, compositionend):
Поведение при вводе букв частично зависит от параметров инициализации AutoNumeric.
allowDecimalPadding — не влияет на буквы, но участвует
в финальном форматировании;decimalCharacter — определяет допустимый символ дробной
части;negativeSignCharacter — задаёт символ отрицания;decimalPlaces — ограничивает точность, но не влияет на
фильтрацию букв;allowLeadingZeros — не влияет на буквенные
символы;formulaMode (если используется) — может расширять
допустимые символы, но в стандартной конфигурации буквы остаются
запрещёнными.В строгих режимах (по умолчанию или при явной настройке) любые попытки ввода букв приводят к:
Если значение устанавливается программно через API:
autoNumericInstance.set("abc123");
AutoNumeric не принимает строку как есть. Вместо этого:
В данном примере итоговое значение будет интерпретировано как
123, если это допустимо конфигурацией.
После любого типа ввода (клавиатура, вставка, программное изменение) AutoNumeric выполняет финальный этап нормализации:
Буквы полностью исключаются на этом этапе без исключений (за
исключением заранее разрешённых специальных символов вроде
e в научной нотации).
Хотя буквенные символы полностью блокируются, визуальное поведение может различаться в зависимости от браузера:
Важно, что итоговое значение всегда остаётся числовым и не содержит буквенных данных.
Поведение AutoNumeric при вводе букв можно представить как последовательный конвейер:
На каждом этапе буквы не проходят дальше, чем слой проверки, что гарантирует строгую числовую целостность значения независимо от источника ввода.