В AutoNumeric входное значение проходит многоступенчатую нормализацию, где ключевую роль играет фильтрация недопустимых символов. Любой ввод — с клавиатуры, вставка из буфера обмена, программная установка значения — приводится к единому числовому представлению с учётом настроек локали и конфигурации экземпляра.
Запрещённые символы определяются не как фиксированный список, а как
результат правил парсинга: допустимый набор строится на основе
параметров decimalCharacter,
digitGroupSeparator, знака минус, а также дополнительных
опций, влияющих на допустимые форматы числа.
Числовое поле AutoNumeric допускает строго ограниченный набор символов:
0–9. или
,),)-Все остальные символы классифицируются как потенциально недопустимые и обрабатываются согласно стратегии очистки или отклонения.
Буквы латиницы, кириллицы и любых других алфавитов рассматриваются как недопустимые в числовом контексте:
A–Z, a–zА–Я, а–яПри вставке текста вроде 12abc34 происходит извлечение
числовой части или полная нормализация в зависимости от режима очистки.
Буквы полностью исключаются из итогового значения.
Любые валютные символы не входят в допустимый набор:
$, €, ₽, ¥,
£Они удаляются на этапе парсинга строки. В AutoNumeric валютное представление реализуется исключительно на уровне форматирования вывода, а не через хранение символов в значении.
Следующие символы считаются недопустимыми в числовом поле:
:;/ и \()[]{}" и '@ # % & * _ = + ! ?Их наличие приводит к очистке строки либо к обрезке значения до допустимой числовой части.
Особый случай — повторяющиеся символы десятичной точки или запятой:
12.34.5612,,341.2.3.4Даже если символ соответствует decimalCharacter,
повторное использование считается ошибочным. Алгоритм оставляет только
первый корректный разделитель, остальные удаляются.
Знак отрицательного числа имеет строгие ограничения:
--12 запрещено12-34 считается
недопустимымТакже учитываются альтернативные Unicode-символы минуса, которые
приводятся к стандартному - или отбрасываются.
Пробелы могут трактоваться двояко:
1 000 000)Неразрывные пробелы (\u00A0) и тонкие пробелы
(\u2009) также нормализуются. При несоответствии
конфигурации они удаляются.
Вводимые данные могут содержать визуально похожие, но технически разные символы:
123− (Unicode U+2212)Такие символы нормализуются через этап преобразования в базовую ASCII-форму. При невозможности нормализации символ исключается.
При вставке строки применяется полный цикл очистки:
Пример:
€ 1.234,56 abc1234.56 (в зависимости от локали)Каждый символ обрабатывается в реальном времени:
Ключевым механизмом является предотвращение попадания недопустимых символов в raw-значение, а не их постфактум удаление.
AutoNumeric допускает различные стратегии обработки запрещённых символов:
Любой недопустимый символ блокируется на этапе ввода. Значение не изменяется.
Символ принимается, но удаляется при нормализации. Визуально ввод может кратковременно отображать некорректные данные до перерасчёта.
Набор запрещённых символов напрямую зависит от параметров:
decimalCharacter — определяет допустимый десятичный
разделительdigitGroupSeparator — влияет на допустимые групповые
символыallowDecimalPadding — влияет на обработку хвостовых
нулейnegativePositiveSignPlacement — задаёт допустимое
расположение знакаcurrencySymbol — если включён, влияет только на
отображение, не на вводТаким образом, один и тот же символ может быть допустимым в одной конфигурации и запрещённым в другой.
В расширенных сценариях применяется пользовательская логика:
Это позволяет вводить дополнительные ограничения, например:
Некоторые сочетания автоматически признаются некорректными:
- без числа. или ,Такие значения либо очищаются до ближайшего валидного состояния, либо приводятся к пустому полю.
Обработка запрещённых символов строится как конвейер:
Результатом становится строго типизированное числовое значение без посторонних символов, независимо от исходного формата ввода.