Форматы денежных значений в веб-приложениях обладают высокой вариативностью: различаются разделители тысяч, символы валют, порядок расположения знаков, допустимые десятичные разряды и локальные соглашения. Валидация таких значений требует не только проверки на числовую корректность, но и учёта контекста отображения и ввода.
Библиотека Validator.js предоставляет специализированный набор
инструментов для проверки строковых значений, включая поддержку денежных
форматов через метод isCurrency. Данный метод ориентирован
на анализ строк, представляющих денежные суммы, и позволяет гибко
настраивать правила валидации под различные стандарты локализации.
Денежные значения в пользовательском вводе могут принимать разнообразные формы:
10001,0001.000$1000€ 1.000,501 000.00Ключевые факторы различий:
1. Разделитель тысяч
1,0001.0001 0002. Десятичный разделитель
10.5010,503. Символ валюты
$100100$€ 1004. Количество десятичных знаков
Метод isCurrency в Validator.js предназначен для
проверки строк, которые должны соответствовать денежному формату. Он не
выполняет математических операций и не преобразует значения, а лишь
проверяет соответствие заданным правилам.
Базовый синтаксис:
validator.isCurrency(str [, options])
str — проверяемая строкаoptions — объект конфигурацииВозвращаемое значение: true или false
Метод анализирует строку по нескольким критериям:
Пример базовой проверки:
import validator from 'validator';
validator.isCurrency('1000'); // true
validator.isCurrency('$1,000.00'); // true
validator.isCurrency('1.000,00'); // false (зависит от настроек)
Гибкость isCurrency обеспечивается набором
параметров.
Определяет допустимый символ валюты.
validator.isCurrency('$100', { symbol: '$' });
Также поддерживаются регулярные выражения:
validator.isCurrency('USD 100', { symbol: 'USD ' });
Определяет обязательность символа валюты.
validator.isCurrency('100', { require_symbol: true }); // false
validator.isCurrency('$100', { require_symbol: true }); // true
Разрешает пробел после символа валюты.
validator.isCurrency('$ 100', { allow_space_after_symbol: true });
Определяет положение символа валюты.
validator.isCurrency('100$', { symbol_after_digits: true });
Разрешает отрицательные значения.
validator.isCurrency('-100', { allow_negatives: true });
Поддержка отрицательных значений в скобках:
validator.isCurrency('(100)', { parens_for_negatives: true });
Задает допустимый разделитель тысяч.
validator.isCurrency('1,000,000', {
thousands_separator: ','
});
Определяет символ десятичного разделителя.
validator.isCurrency('1000.50', {
decimal_separator: '.'
});
Разрешает или запрещает десятичную часть.
validator.isCurrency('1000.50', { allow_decimal: true });
validator.isCurrency('1000', { allow_decimal: false });
Ограничивает количество знаков после запятой.
validator.isCurrency('1000.123', {
digits_after_decimal: [1, 2]
});
validator.isCurrency('1.000,50', {
symbol: '€',
require_symbol: true,
thousands_separator: '.',
decimal_separator: ',',
allow_space_after_symbol: true
});
validator.isCurrency('$1,000.50', {
symbol: '$',
require_symbol: true,
thousands_separator: ',',
decimal_separator: '.'
});
validator.isCurrency('1000.00', {
require_symbol: false,
allow_decimal: true
});
Разные локали используют несовместимые соглашения, что требует явной настройки валидации:
1,000.001.000,001,00,000.001'000.00Validator.js не выполняет автоматическое определение локали, поэтому разработчик обязан явно задавать правила под конкретный контекст.
1. Отсутствие явного указания разделителей
Без настройки thousands_separator и
decimal_separator возможны ложные срабатывания.
2. Игнорирование символа валюты
При включённом require_symbol строка без валютного знака
будет считаться невалидной.
3. Смешение форматов
Строка вида 1,000.50 может быть интерпретирована
по-разному в зависимости от локали.
4. Неправильная работа с отрицательными значениями
Неактивированный allow_negatives блокирует валидные
финансовые данные.
Валидация денежных значений обычно применяется на уровне пользовательского ввода:
При интеграции с Validator.js часто используется комбинирование:
isCurrencyПример цепочки обработки:
let value = input.trim();
if (validator.isCurrency(value, {
symbol: '$',
thousands_separator: ',',
decimal_separator: '.'
})) {
// значение допустимо
}
Гибкая настройка параметров делает проверку денежных значений в Validator.js применимой в широком спектре финансовых интерфейсов, где требуется строгий контроль формата ввода без привязки к единственной локали или стандарту.