Европейский числовой формат в веб-интерфейсах обычно характеризуется использованием запятой в качестве десятичного разделителя и точки или пробела для группировки разрядов. На практике встречаются варианты:
1.234.567,89 (Германия, Россия, большинство стран
Европы с запятой как decimal)1 234 567,89 (Франция и ряд франкоязычных
регионов)1.234.567,89 (смешанные корпоративные стандарты)Браузерные <input> по умолчанию не поддерживают
строгую локализацию числового ввода, поэтому требуется программный слой,
который обеспечивает:
AutoNumeric решает эти задачи за счёт перехвата ввода и применения правил форматирования поверх стандартного input-элемента.
Основная идея заключается в явном указании разделителей:
,. или пробелПример инициализации:
new AutoNumeric('#price', {
decimalCharacter: ',',
digitGroupSeparator: '.',
decimalPlaces: 2
});
В этом случае ввод 1234567.89 будет отображаться как
1.234.567,89.
Ключевое поведение:
AutoNumeric оперирует двумя основными символами форматирования:
decimalCharacter Определяет символ отделения дробной части.
digitGroupSeparator Определяет символ группировки разрядов.
Типичные комбинации:
| Регион | decimalCharacter | digitGroupSeparator |
|---|---|---|
| Германия | , |
. |
| Франция | , |
|
| Россия (часто в UI) | , |
или . |
| Великобритания | . |
, |
Пример конфигурации для французского стиля:
new AutoNumeric('#amount', {
decimalCharacter: ',',
digitGroupSeparator: ' ',
decimalPlaces: 2
});
AutoNumeric не просто форматирует отображение, а активно управляет вводом:
При вводе 1234,56:
, фиксируется как десятичный;decimalPlaces;1 234,56 или
1.234,56 в зависимости от конфигурации.Особое значение имеет нормализация paste-событий. При вставке строки:
"1,234.56"
в европейском режиме она будет интерпретирована согласно настройкам локали, а не как буквальная строка.
В европейских финансовых интерфейсах часто требуется строгая точность:
new AutoNumeric('#sum', {
decimalCharacter: ',',
digitGroupSeparator: '.',
decimalPlaces: 2,
roundingMethod: 'S',
minimumValue: '0'
});
roundingMethod управляет стратегией округления:
S — half-up (стандартное банковское округление)U — округление вверхD — округление внизF — округление к нулюПример:
10,556decimalPlaces: 2 и S:
10,56Во многих европейских системах используется неразрывный пробел:
new AutoNumeric('#field', {
decimalCharacter: ',',
digitGroupSeparator: '\u202F' // narrow no-break space
});
Использование тонкого пробела предотвращает перенос чисел на новую строку, что критично для табличных интерфейсов и финансовых панелей.
AutoNumeric разделяет:
Получение значения:
const an = AutoNumeric.getAutoNumericElement('#price');
const numericValue = an.getNumber(); // 1234567.89
const formattedValue = an.getString(); // "1.234.567,89"
Для отправки формы почти всегда используется getNumber()
или getNumericString().
Пример подготовки payload:
const payload = {
price: an.getNumber()
};
Это исключает проблемы серверного парсинга локализованных строк.
AutoNumeric поддерживает несколько стратегий:
new AutoNumeric('#balance', {
decimalCharacter: ',',
digitGroupSeparator: '.',
allowLeadingMinusSign: true
});
Поведение:
-1234,5 → -1.234,50-В финансовых интерфейсах важно ограничивать значения:
new AutoNumeric('#budget', {
decimalCharacter: ',',
digitGroupSeparator: '.',
minimumValue: '0',
maximumValue: '1000000'
});
При попытке ввода значения выше максимума:
В сложных формах европейский формат применяется ко множеству полей:
AutoNumeric.multiple('.currency-field', {
decimalCharacter: ',',
digitGroupSeparator: '.',
decimalPlaces: 2
});
Такой подход обеспечивает единое поведение:
При работе с SPA интерфейсами (React, Vue, vanilla DOM manipulation) важно повторно инициализировать форматирование:
const el = document.createElement('input');
el.classList.add('currency-field');
document.body.appendChild(el);
new AutoNumeric(el, {
decimalCharacter: ',',
digitGroupSeparator: '.'
});
AutoNumeric не «следит» за DOM автоматически, поэтому каждое новое поле требует инициализации.
На сервере европейский формат обычно не используется. Поэтому типичный поток данных:
1.234,56;1234.56;Критически важно избегать отправки строк:
"1.234,56" ❌
1234.56 ✔
AutoNumeric изменяет отображение в зависимости от состояния input:
Пример:
new AutoNumeric('#field', {
decimalCharacter: ',',
digitGroupSeparator: '.',
showOnlyNumbersOnFocus: false,
selectOnFocus: true
});
Поведение:
1234,561.234,56AutoNumeric работает поверх стандартных <input> и
не требует изменений HTML:
<input id="price" type="text" name="price">
При этом важно учитывать:
type="number" не рекомендуется, так как он конфликтует
с локализацией;type="text" является стандартом для AutoNumeric.На практике часто встречаются проблемы:
1. Несовпадение decimalCharacter и серверного парсинга Сервер ожидает точку, клиент использует запятую.
2. Использование неподходящего разделителя групп Например, пробел в системах, где требуется точка.
3. Отправка форматированных строк вместо чисел
4. Конфликты с масками ввода Одновременное использование Inputmask и AutoNumeric приводит к борьбе за DOM-значение.
Хотя AutoNumeric не является валютной библиотекой, часто используется совместно с валютным отображением:
new AutoNumeric('#eur', {
decimalCharacter: ',',
digitGroupSeparator: '.',
decimalPlaces: 2,
currencySymbol: '€',
currencySymbolPlacement: 's'
});
Результат отображения:
1.234,56 €
При этом символ валюты не влияет на числовое значение.
AutoNumeric перехватывает clipboard-события:
1 234,56 → нормализация;1.234.567,89 → интерпретация как европейский
формат или очищение в зависимости от настроек;При десятках и сотнях полей:
multiple.Основная нагрузка возникает не в форматировании, а в обработке
событий input и keydown.
AutoNumeric компенсирует различия через унифицированный слой событий.
В корпоративных системах часто используется нестандартный европейский формат:
,' или .Пример:
new AutoNumeric('#corp', {
decimalCharacter: ',',
digitGroupSeparator: "'",
decimalPlaces: 3
});
Результат:
1'234'567,890
Такой формат особенно распространён в банковских интерфейсах и ERP-системах.