Санитизация данных в AutoNumeric представляет собой многоуровневый процесс преобразования «сырых» пользовательских и программных значений в строго нормализованный числовой формат, соответствующий заданной локали и набору правил форматирования. В основе работы библиотеки лежит идея полного контроля над входным потоком символов с последующей детерминированной трансформацией в числовое представление без потерь и неоднозначностей.
AutoNumeric обрабатывает несколько типов входных данных, каждый из которых проходит собственный путь очистки:
Каждый источник рассматривается как потенциально «грязный», поскольку может содержать символы, не относящиеся к допустимому числовому формату: буквы, пробелы, нестандартные разделители, символы валют, невидимые Unicode-символы.
Санитизация начинается до момента отображения значения в input и продолжается при каждом изменении состояния элемента.
Первый этап очистки — приведение входной строки к каноническому виду. На этом уровне AutoNumeric выполняет:
Например, входная строка:
"€ 1 234,56abc"
после первичной санитизации превращается в промежуточное представление:
"1234.56"
Ключевой момент заключается в том, что библиотека не просто фильтрует строку, а перестраивает её структуру согласно конфигурации локали.
Одной из наиболее сложных частей санитизации является работа с десятичными и групповыми разделителями. AutoNumeric использует параметры:
decimalCharacterdigitGroupSeparatorЭти настройки определяют, какие символы считаются валидными в контексте числа.
При обработке входа выполняется следующая логика:
Особое внимание уделяется ситуациям, когда пользователь вводит число в «человеческом» формате:
1.234.567,89
Для локали de-DE это корректный формат, но для
en-US он требует трансформации:
1234567.89
AutoNumeric не просто заменяет символы, а анализирует контекст их использования.
Вставка из буфера обмена считается наиболее «грязным» источником данных. В этом случае библиотека применяет расширенный пайплайн:
Если вставляемая строка содержит смешанные данные:
Total: <b>12,300.50 USD</b>
результатом станет:
12300.50
При этом любые HTML-инъекции полностью нейтрализуются на уровне текстового извлечения, что делает невозможным внедрение DOM-элементов через input-поле.
AutoNumeric поддерживает строгую модель интерпретации входных данных. В строгом режиме:
Пример:
"12a34b56"
преобразуется в:
123456
При этом библиотека не пытается «угадывать» намерение пользователя, а действует детерминированно.
Санитизация отрицательных значений зависит от конфигурации:
allowLeadingMinusnegativePositiveSignPlacementВход:
--12,34
преобразуется в:
-12.34
Двойные знаки минуса и некорректные позиции символа полностью устраняются на этапе нормализации.
Символы валюты ($, €, ₽) и
текстовые суффиксы удаляются либо игнорируются в зависимости от
конфигурации:
currencySymbolcurrencySymbolPlacementПример входа:
$ 1,200.00 USD
После санитизации:
1200.00
Важно, что символ валюты не участвует в числовой интерпретации и никогда не сохраняется в raw-значении.
AutoNumeric разделяет два слоя данных:
Методы:
getNumber()getNumericString()getFormatted()обеспечивают доступ к разным уровням санитизированных данных.
Санитизация всегда приводит к одному каноническому виду:
"1234.56"
независимо от локали отображения.
Внутренний процесс обработки входа можно представить как последовательность этапов:
Каждый этап является детерминированным и не зависит от внешнего состояния DOM.
При столкновении с некорректными строками AutoNumeric применяет стратегию «best effort sanitization»:
Пример:
"abc"
→ пустое значение или 0 (в зависимости от настроек)
"10..20"
→ 10.20
При установке значения программно:
anElement.set("1,23a4.50");
AutoNumeric не доверяет входной строке и всегда прогоняет её через тот же пайплайн, что и пользовательский ввод.
Это обеспечивает консистентность между:
Санитизация тесно связана с жизненным циклом событий:
inputkeydownpastewheelblurКаждое событие может инициировать частичную или полную переработку значения.
Например, при blur выполняется финальная нормализация,
которая гарантирует, что значение соответствует формату даже при
незавершённом вводе.
Хотя AutoNumeric не является библиотекой безопасности в чистом виде, её механизм очистки снижает ряд рисков:
Особенно важно, что значение всегда интерпретируется как число, а не как строка с потенциальной семантикой.
Поведение санитизации полностью определяется конфигурацией:
Это позволяет адаптировать механизм очистки под финансовые, статистические и пользовательские сценарии, где требования к точности и допустимым форматам различаются.