Параметр отображения валютного символа — одна из ключевых возможностей библиотеки AutoNumeric. Он отвечает за визуальное представление денежных значений внутри поля ввода и позволяет автоматически добавлять обозначения валют, финансовых единиц, пользовательских префиксов и постфиксов.
AutoNumeric не изменяет само числовое значение. Символ валюты является частью форматирования интерфейса и используется исключительно для отображения.
Примеры:
1000 -> $1,000
1000 -> €1 000
1000 -> ₽1 000
1000 -> 1,000 USD
1000 -> 1 000 тенге
Для управления символом валюты используются несколько взаимосвязанных параметров:
currencySymbolcurrencySymbolPlacementnegativePositiveSignPlacementshowOnlyNumbersOnFocusemptyInputBehaviorcurrencySymbolОсновной параметр:
currencySymbol
Определяет строку, которая будет отображаться рядом с числом.
Простейший пример:
new AutoNumeric('#price', {
currencySymbol: '$'
});
Результат:
$12,500.00
Поддерживаются:
new AutoNumeric('#price', {
currencySymbol: '$'
});
Результат:
$5,000
new AutoNumeric('#price', {
currencySymbol: '€'
});
Результат:
€5 000
new AutoNumeric('#price', {
currencySymbol: '₽'
});
Результат:
₽5 000
new AutoNumeric('#price', {
currencySymbol: '₸'
});
Результат:
₸5 000
new AutoNumeric('#price', {
currencySymbol: '¥'
});
new AutoNumeric('#price', {
currencySymbol: '£'
});
AutoNumeric поддерживает не только одиночные символы.
new AutoNumeric('#price', {
currencySymbol: 'USD '
});
Результат:
USD 1,500
new AutoNumeric('#price', {
currencySymbol: ' тенге'
});
Результат:
15 000 тенге
Параметр подходит не только для валют.
new AutoNumeric('#distance', {
currencySymbol: ' км'
});
Результат:
120 км
new AutoNumeric('#percent', {
currencySymbol: '%',
currencySymbolPlacement: 's'
});
Результат:
25%
Параметр:
currencySymbolPlacement
Допустимые значения:
| Значение | Описание |
|---|---|
'p' |
символ перед числом |
's' |
символ после числа |
Значение по умолчанию:
new AutoNumeric('#price', {
currencySymbol: '$',
currencySymbolPlacement: 'p'
});
Результат:
$1,000
new AutoNumeric('#price', {
currencySymbol: ' ₽',
currencySymbolPlacement: 's'
});
Результат:
1 000 ₽
AutoNumeric не добавляет пробел автоматически. Его необходимо указывать вручную.
Неправильно:
currencySymbol: '₽'
Результат:
1000₽
Правильно:
currencySymbol: ' ₽'
Результат:
1 000 ₽
Для предотвращения переноса валюты на новую строку часто используется Unicode-символ неразрывного пробела.
currencySymbol: '\u00A0₽'
Или:
currencySymbol: ' ₽'
Результат:
1 000 ₽
Символ валюты обычно используется совместно с:
digitGroupSeparator
decimalCharacter
currencySymbol
currencySymbolPlacement
Пример европейского формата:
new AutoNumeric('#price', {
digitGroupSeparator: ' ',
decimalCharacter: ',',
currencySymbol: ' €',
currencySymbolPlacement: 's'
});
Результат:
1 234 567,89 €
Символ валюты влияет на положение знака минуса.
Пример:
new AutoNumeric('#price', {
currencySymbol: '$',
negativePositiveSignPlacement: 'l'
});
Результат:
-$500
negativePositiveSignPlacementДопустимые значения:
| Значение | Описание |
|---|---|
'l' |
знак слева |
'r' |
знак справа |
'p' |
знак перед валютой |
's' |
знак после валюты |
new AutoNumeric('#price', {
currencySymbol: '$',
negativePositiveSignPlacement: 'p'
});
Результат:
-$500
new AutoNumeric('#price', {
currencySymbol: '$',
negativePositiveSignPlacement: 's'
});
Результат:
$-500
new AutoNumeric('#price', {
currencySymbol: ' ₽',
currencySymbolPlacement: 's',
negativePositiveSignPlacement: 'l'
});
Результат:
-500 ₽
Параметр:
showOnlyNumbersOnFocus
Позволяет временно скрывать форматирование.
new AutoNumeric('#price', {
currencySymbol: ' ₽',
currencySymbolPlacement: 's',
showOnlyNumbersOnFocus: true
});
Поведение:
Без фокуса: 10 000 ₽
В фокусе: 10000
Это особенно удобно при редактировании длинных денежных значений.
Параметр:
emptyInputBehavior
Позволяет управлять отображением символа валюты при отсутствии числа.
new AutoNumeric('#price', {
currencySymbol: '$',
emptyInputBehavior: null
});
Результат:
''
new AutoNumeric('#price', {
currencySymbol: '$',
emptyInputBehavior: 'focus'
});
AutoNumeric позволяет динамически менять настройки.
const an = new AutoNumeric('#price', {
currencySymbol: '$'
});
an.update({
currencySymbol: ' €',
currencySymbolPlacement: 's'
});
Результат изменится автоматически:
1,500
↓
1 500 €
Типичный пример:
const currencies = {
usd: {
currencySymbol: '$',
decimalCharacter: '.',
digitGroupSeparator: ','
},
eur: {
currencySymbol: ' €',
currencySymbolPlacement: 's',
decimalCharacter: ',',
digitGroupSeparator: ' '
}
};
const an = new AutoNumeric('#price');
select.addEventListener('change', e => {
an.update(currencies[e.target.value]);
});
Важно понимать различие между:
getFormatted()Возвращает значение вместе с валютой.
an.getFormatted();
Результат:
$1,500.00
getNumericString()Возвращает только число.
an.getNumericString();
Результат:
1500.00
getNumber()Возвращает JavaScript Number.
an.getNumber();
Результат:
1500
Символ валюты при этом полностью игнорируется.
Допускается использование HTML-символов.
currencySymbol: '€'
Однако предпочтительнее использовать Unicode:
currencySymbol: '€'
Это предотвращает проблемы с кодировкой.
Параметр поддерживает произвольные строки.
currencySymbol: 'Сумма: '
Результат:
Сумма: 15 000
new AutoNumeric('#weight', {
currencySymbol: ' кг',
currencySymbolPlacement: 's'
});
Результат:
75 кг
Неправильно:
currencySymbol: '₽'
currencySymbolPlacement: 's'
Результат:
1000₽
Правильно:
currencySymbol: ' ₽'
Неправильно:
digitGroupSeparator: ',',
decimalCharacter: ','
Разделители не должны совпадать.
Правильно:
digitGroupSeparator: ' ',
decimalCharacter: ','
Неправильно:
input.value = '$1000';
AutoNumeric должен управлять форматированием самостоятельно.
Правильно:
an.set(1000);
new AutoNumeric('#salary', {
digitGroupSeparator: ' ',
decimalCharacter: ',',
decimalPlaces: 2,
currencySymbol: ' ₽',
currencySymbolPlacement: 's',
minimumValue: '0',
maximumValue: '999999999',
showOnlyNumbersOnFocus: false
});
Результат:
125 000,00 ₽
const localeConfig = {
us: {
digitGroupSeparator: ',',
decimalCharacter: '.',
currencySymbol: '$'
},
fr: {
digitGroupSeparator: ' ',
decimalCharacter: ',',
currencySymbol: ' €',
currencySymbolPlacement: 's'
},
kz: {
digitGroupSeparator: ' ',
decimalCharacter: ',',
currencySymbol: ' ₸',
currencySymbolPlacement: 's'
}
};
const an = new AutoNumeric('#price', localeConfig.kz);
Возможные результаты:
$10,000.50
10 000,50 €
10 000,50 ₸