Механизмы копирования и вставки в AutoNumeric являются ключевым элементом системы ввода числовых значений, поскольку именно через буфер обмена чаще всего поступают «грязные» данные: числа с лишними символами, пробелами, валютными обозначениями, неверными разделителями и форматами локалей. Библиотека решает задачу нормализации таких данных до внутреннего числового представления и последующего отображения в соответствии с заданной конфигурацией.
При копировании значения из поля, управляемого AutoNumeric, важно различать два уровня представления:
AutoNumeric по умолчанию позволяет копировать именно отображаемое значение, поскольку это соответствует ожиданиям пользователя. Однако в некоторых сценариях требуется копирование «сырого» числа.
Ключевые аспекты поведения при копировании:
1 234,56 € или
$1,234.56).Внутри библиотеки это поведение обеспечивается отсутствием
вмешательства в событие copy, если не задана кастомная
логика через обработчики.
Вставка является более сложным процессом, чем копирование, поскольку входные данные могут содержать:
1,234.56,
1.234,56);€, $, ₽);approx. 1000,
1 000 rub);1e6).AutoNumeric перехватывает событие paste и выполняет
цепочку обработки:
На этапе нормализации выполняется ключевая трансформация строки. Библиотека учитывает настройки экземпляра:
decimalCharacterdigitGroupSeparatorcurrencySymbolnegativeSignCharacterdecimalPlacesallowDecimalPaddingПример поведения:
Вставка строки:
"1 234,56 руб."
При конфигурации:
decimalCharacter = ","digitGroupSeparator = " "Результат:
1234,56
Если локаль не совпадает, AutoNumeric пытается определить наиболее вероятный формат и привести его к внутреннему виду.
AutoNumeric использует стратегию перехвата paste для
предотвращения вставки «как есть».
Типовой процесс:
set() с уже обработанным значением.Важный момент: даже если вставка выглядит как обычный ввод, фактически происходит программное присвоение значения через внутренние методы библиотеки.
Вход:
"1.234,56"
При настройках:
decimalCharacter = ","digitGroupSeparator = "."Результат:
1234,56
Вход:
"1,234.56"
При тех же настройках:
Результат также нормализуется в:
1234,56
Библиотека выполняет интеллектуальное различение групповых и десятичных разделителей на основе позиции символов и длины групп.
AutoNumeric игнорирует нечисловые символы, если они не являются частью конфигурации.
Примеры очистки:
Вход:
"$ 2,500.00 USD"
Результат:
2500.00
Вход:
"approx. 99.95€"
Результат:
99.95
Если включена строгая настройка, поведение может изменяться:
AutoNumeric корректно обрабатывает различные формы отрицательных чисел:
-1000(1000)- 1 000,50После вставки:
-1000.50 (или локальному
формату);Некоторые реализации AutoNumeric поддерживают научную нотацию:
Вход:
"1e6"
Результат:
1000000
Однако при строгой конфигурации такие значения могут быть отклонены или обрезаны.
AutoNumeric предоставляет набор событий, связанных с изменением значения:
onBeforePaste — вызывается перед обработкой
вставки;onChange — после изменения значения;onInvalidPaste — при отклонении вставленных
данных.Пример логики обработки:
Это позволяет реализовать бизнес-логику, например:
При вставке в выделенный фрагмент AutoNumeric ведёт себя как стандартное input-поле:
Это предотвращает появление «разнородного» форматирования внутри одного значения.
Помимо пользовательской вставки через буфер обмена, данные могут поступать через API:
set(value)setNumeric(value)format(value)При использовании set() происходит та же логика
нормализации, что и при вставке:
Таким образом, вставка и программное присвоение унифицированы.
Работа вставки зависит от особенностей окружения:
clipboardData между браузерами;AutoNumeric учитывает эти ограничения, но в ряде случаев поведение может зависеть от платформы.
При вставке чисел, превышающих безопасный диапазон JavaScript
(Number.MAX_SAFE_INTEGER), возможны ограничения:
AutoNumeric может работать в режиме строкового хранения, чтобы минимизировать эти эффекты.
В конфигурации можно задать правила, влияющие на вставку:
allowedCharacterSet);onInvalidPaste);modifyValueOnWheel не относится
напрямую, но влияет на поведение значения).Это позволяет строить строгие формы ввода, где вставка становится контролируемым источником данных, а не свободным каналом.
Механизм копирования и вставки в AutoNumeric представляет собой многоступенчатую систему:
Такой подход обеспечивает согласованность между ручным вводом, вставкой и программным изменением значения, устраняя расхождения между отображением и реальным числом.