В AutoNumeric разделители чисел — это базовый механизм форматирования, отвечающий за отображение десятичной части и групп разрядов. Ключевая особенность библиотеки заключается в том, что визуальное представление числа отделено от его «сырого» значения, а любые изменения форматирования применяются динамически без потери данных.
В контексте AutoNumeric используются два фундаментальных параметра:
Эти параметры определяют, как число выглядит в поле ввода:
1234567.89 → 1,234,567.89 (стандартный
формат)1234567.89 → 1 234 567,89 (европейский
формат)1234567.89 → 1.234.567,89 (альтернативный
вариант)AutoNumeric не привязывается к локали браузера, поэтому любые изменения разделителей выполняются явно через конфигурацию.
Изменение разделителей в AutoNumeric не является простым «замещением символов в строке». Внутри библиотеки происходит:
Это важно, потому что прямое изменение текста input без пересчёта привело бы к нарушению числовой целостности.
Базовый способ задания разделителей — передача параметров при создании экземпляра:
const anElement = new AutoNumeric('#price', {
digitGroupSeparator: ' ',
decimalCharacter: ','
});
В этом случае все последующие операции уже будут учитывать заданный формат.
В реальных интерфейсах часто требуется менять формат «на лету»: переключение валют, локалей или пользовательских настроек отображения.
AutoNumeric поддерживает изменение конфигурации без повторного создания экземпляра.
const anElement = AutoNumeric.getAutoNumericElement('#price');
anElement.update({
digitGroupSeparator: ',',
decimalCharacter: '.'
});
После вызова происходит полная переработка отображения текущего значения в соответствии с новыми правилами.
При изменении разделителей важно понимать различие между двумя уровнями данных:
AutoNumeric всегда сохраняет unformatted значение неизменным, даже если формат меняется.
Пример:
// было: "1 234 567,89"
anElement.update({
digitGroupSeparator: ',',
decimalCharacter: '.'
});
// стало: "1,234,567.89"
При этом внутреннее значение остаётся 1234567.89.
В некоторых конфигурациях (особенно при сложных массивах элементов) применяется стратегия полной переинициализации:
AutoNumeric.remove('#price');
new AutoNumeric('#price', {
digitGroupSeparator: '.',
decimalCharacter: ','
});
Такой подход используется, когда:
При работе с multiple-инициализацией изменения
применяются ко всем связанным полям:
const list = AutoNumeric.multiple('.price-field', {
digitGroupSeparator: ' ',
decimalCharacter: ','
});
list.forEach(an => {
an.update({
digitGroupSeparator: ',',
decimalCharacter: '.'
});
});
Это позволяет централизованно переключать формат отображения сразу в нескольких input-элементах.
Часто обновление разделителей используется как упрощённый механизм смены локали.
Примеры соответствий:
1,234,567.891.234.567,891 234 567,89Реализация через AutoNumeric:
function setLocale(an, locale) {
switch (locale) {
case 'en-US':
an.update({
digitGroupSeparator: ',',
decimalCharacter: '.'
});
break;
case 'de-DE':
an.update({
digitGroupSeparator: '.',
decimalCharacter: ','
});
break;
case 'fr-FR':
an.update({
digitGroupSeparator: ' ',
decimalCharacter: ','
});
break;
}
}
При активном вводе изменение разделителей имеет дополнительные нюансы:
Например, при смене decimalCharacter с . на
,:
1234.51 234,5AutoNumeric оптимизирует перерисовку значения. При изменении разделителей:
Это важно для интерфейсов с высокой частотой обновлений (например, финансовые формы или калькуляторы).
Некоторые конфигурации допускают альтернативный десятичный разделитель, например:
{
decimalCharacter: ',',
decimalCharacterAlternative: '.'
}
При обновлении разделителей необходимо учитывать оба параметра:
anElement.update({
decimalCharacter: '.',
decimalCharacterAlternative: ','
});
Игнорирование альтернативного символа может привести к неоднозначному поведению ввода, особенно при смене локали.
При обновлении разделителей важно учитывать взаимодействие с сервером.
AutoNumeric всегда отправляет:
Пример:
anElement.update({
digitGroupSeparator: ' ',
decimalCharacter: ','
});
Отправка на сервер остаётся:
1234567.89
Это означает, что изменение разделителей влияет только на UI-слой и не затрагивает слой данных.
В SPA-приложениях разделители часто привязываются к состоянию:
state.currencyFormat = {
digitGroupSeparator: ' ',
decimalCharacter: ','
};
function applyFormat(an) {
an.update(state.currencyFormat);
}
При изменении настроек пользователя достаточно вызвать повторное применение конфигурации без пересоздания DOM-элементов.
Несмотря на гибкость, существуют ограничения:
Если заданы некорректные разделители, AutoNumeric:
Пример ситуации:
anElement.update({
decimalCharacter: ',',
digitGroupSeparator: ','
});
В этом случае библиотека предотвращает конфликт символов и сохраняет стабильное поведение поля.
Обновление разделителей в AutoNumeric строится на трёх уровнях:
Эта модель позволяет менять формат чисел в реальном времени без потери данных и без нарушения пользовательского ввода, обеспечивая предсказуемое поведение интерфейса даже при сложных сценариях динамического форматирования.