Разрешенные символы

Общая модель допустимых символов

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

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

Основные категории разрешённых символов:

  • цифры 0–9
  • знак отрицательного числа - (при включённой поддержке)
  • десятичный разделитель (например, . или ,)
  • разделитель групп разрядов (например, пробел, ,, . в зависимости от конфигурации)
  • символ валюты (если включён режим валютного отображения)
  • дополнительные служебные символы, зависящие от конфигурации

Цифровые символы

Цифры 0–9 являются базовым набором допустимых символов и всегда разрешены вне зависимости от настроек.

Особенности обработки:

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

Пример допустимого ввода:

  • 123456
  • 000123

После форматирования:

  • 000123123

Десятичный разделитель

Десятичный разделитель задаётся параметром конфигурации decimalCharacter (или аналогичным в зависимости от версии).

Поддерживаемые варианты:

  • точка .
  • запятая ,

Правила поведения:

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

Примеры:

Вариант с точкой:

  • вход: 12.34
  • результат: 12.34

Вариант с запятой:

  • вход: 12,34
  • результат: 12,34

Некорректные случаи:

  • 12..34 → нормализуется к 12.34
  • 12,,34 → нормализуется к 12,34

Разделитель групп разрядов

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

Типичные значения:

  • пробел " "
  • запятая ,
  • точка .
  • апостроф '

Поведение:

  • символ разрешён только в режиме отображения
  • при вводе пользователем игнорируется либо используется как подсказка для форматирования
  • при парсинге всегда удаляется

Пример:

  • ввод: 1 000 000
  • значение: 1000000

Особенность: разделитель групп может динамически вставляться при наборе, создавая иллюзию «живого форматирования».


Знак отрицательного числа

Символ - используется для обозначения отрицательных значений и управляется параметром negativeSignAllowed.

Правила:

  • допустим только один знак -
  • допустимая позиция: в начале числа или в соответствии с конфигурацией
  • повторный ввод игнорируется
  • может быть запрещён полностью

Примеры:

  • -123 → допустимо
  • --123 → нормализуется к -123
  • 123- → приводится к -123 или 123 в зависимости от режима вставки

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


Символ валюты

Символ валюты является декоративным элементом и управляется настройками вроде currencySymbol, currencySymbolPlacement.

Допустимые формы:

  • $
  • любые Unicode-символы валют

Поведение:

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

Примеры:

  • $1,000
  • 1,000₸

В режиме строгой конфигурации символ валюты может быть единственным разрешённым нечисловым символом помимо разделителей.


Пользовательские разрешённые символы

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

Механизмы:

  • allowedChar / whitelist
  • регулярные выражения фильтрации
  • кастомные функции обработки ввода

Пример логики whitelist:

  • разрешены только символы: 0–9, ., -
  • любые другие символы удаляются при вводе

Это позволяет создавать специализированные поля, например:

  • ввод процентов (%)
  • ввод идентификаторов с числовой основой
  • финансовые формы с нестандартной локализацией

Запрещённые символы и стратегия очистки

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

К ним относятся:

  • буквы любых алфавитов
  • эмодзи
  • специальные знаки (@, #, &, *, и т.д.)
  • управляющие символы

Стратегии обработки:

  • удаление при вводе
  • игнорирование при вставке
  • очистка при потере фокуса
  • нормализация при парсинге

Пример:

  • ввод: 12a34b56
  • результат: 123456

Обработка вставки (paste) и допустимые символы

При вставке текста из буфера обмена применяется отдельный слой фильтрации.

Особенности:

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

Примеры:

  • вставка 1,2a3.4b5123.45 (в зависимости от локали)
  • вставка --10..5-10.5

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


Юникод и локализация символов

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

Примеры:

  • арабские цифры ٠١٢٣٤٥
  • полноширинные цифры 12345
  • локализованные запятые и точки

Поведение:

  • часть символов может быть автоматически конвертирована в ASCII
  • неподдерживаемые формы удаляются или нормализуются
  • десятичный разделитель адаптируется под региональные настройки

Приоритет правил разрешения символов

При обработке ввода применяется многоуровневая система приоритетов:

  1. Явно разрешённые символы конфигурации
  2. Локализованные допустимые символы
  3. Символы форматирования (группы, валюта)
  4. Автоматически преобразуемые символы
  5. Запрещённые символы (удаляются)

Такая иерархия обеспечивает предсказуемость поведения даже при смешанном вводе.


Влияние форматирования на набор символов

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

Особенности:

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

Пример:

  • пользователь вводит: 1000
  • отображается: 1 000 или 1,000 в зависимости от настроек

Конфликты символов и их разрешение

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

Правила:

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

Пример конфликта:

  • разделитель группы ,
  • десятичный разделитель ,

Решение:

  • последний введённый символ трактуется как десятичный
  • предыдущие становятся групповыми или удаляются

Итоговая модель допустимых символов

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