Validator.js содержит набор методов для валидации строковых значений, имитирующих числа, валютные записи и другие форматы ввода. В контексте числовых данных особое значение имеют методы isDecimal и isCurrency, поскольку они решают разные задачи: проверку «чистого» десятичного числа и проверку строки, оформленной как денежное значение с учётом локалей, символов и форматирования.
Метод isDecimal предназначен для проверки, является ли строка корректным представлением десятичного числа. В отличие от простых числовых проверок, он работает именно со строками и учитывает строгие правила формата.
Функция проверяет значения вроде:
"10""10.5""-3.14""0.0001"и отклоняет:
"10,5" (если не задана соответствующая локаль)"10.5.3""abc""10." (в зависимости от настроек)isDecimal(str [, options])
str — строка для проверкиoptions — объект конфигурации (необязательный)По умолчанию проверка достаточно строгая:
.)- или
+validator.isDecimal("10.25"); // true
validator.isDecimal("-10.25"); // true
validator.isDecimal("10,25"); // false
validator.isDecimal("10.25.1"); // false
Метод поддерживает конфигурацию, позволяющую адаптировать проверку под различные форматы.
force_decimalТребует обязательного наличия десятичной части.
validator.isDecimal("10", { force_decimal: true }); // false
validator.isDecimal("10.0", { force_decimal: true }); // true
decimal_digitsОграничивает количество знаков после запятой.
validator.isDecimal("10.123", { decimal_digits: "2" }); // false
validator.isDecimal("10.12", { decimal_digits: "2" }); // true
Допустимы диапазоны:
{ decimal_digits: "1,3" } // от 1 до 3 знаков
localeПозволяет учитывать локальные правила (например, запятую как десятичный разделитель).
validator.isDecimal("10,25", { locale: "de-DE" }); // true
1e5 → false)Метод isCurrency используется для валидации строк, представляющих денежные значения. В отличие от isDecimal, он учитывает символ валюты, разделители тысяч, локальные форматы и дополнительные правила отображения.
Поддерживаются форматы:
"1000""1,000.00""$1000""€ 1.000,00""-1000""(1000)" (в некоторых конфигурациях)isCurrency(str [, options])
validator.isCurrency("1000.00"); // true
validator.isCurrency("$1000.00"); // false (без настройки символа)
Метод обладает широким набором параметров, позволяющих описать практически любой валютный формат.
symbolОпределяет символ валюты.
validator.isCurrency("$100", { symbol: "$" }); // true
require_symbolТребует обязательного наличия символа валюты.
validator.isCurrency("100", {
symbol: "$",
require_symbol: true
}); // false
allow_space_after_symbolРазрешает пробел после символа валюты.
validator.isCurrency("$ 100", {
symbol: "$",
allow_space_after_symbol: true
}); // true
symbol_after_digitsОпределяет расположение символа валюты после числа.
validator.isCurrency("100$", {
symbol: "$",
symbol_after_digits: true
}); // true
thousands_separatorЗадает разделитель тысяч.
validator.isCurrency("1.000.000", {
thousands_separator: "."
}); // true
decimal_separatorОпределяет символ дробной части.
validator.isCurrency("1000,50", {
decimal_separator: ","
}); // true
allow_decimalРазрешает или запрещает дробную часть.
validator.isCurrency("1000", {
allow_decimal: false
}); // true
validator.isCurrency("1000.50", {
allow_decimal: false
}); // false
require_decimalТребует обязательного наличия дробной части.
validator.isCurrency("1000", {
require_decimal: true
}); // false
digits_after_decimalОграничивает количество знаков после запятой.
validator.isCurrency("1000.123", {
digits_after_decimal: [1, 2]
}); // false
allow_negativesРазрешает отрицательные значения.
validator.isCurrency("-1000", {
allow_negatives: true
}); // true
parens_for_negativesПоддержка отрицательных чисел в скобках.
validator.isCurrency("(1000)", {
parens_for_negatives: true
}); // true
negative_sign_before_digits
и negative_sign_after_digitsКонтролируют расположение минуса.
validator.isCurrency("-1000", {
negative_sign_before_digits: true
});
validator.isCurrency("1.234.567,89", {
symbol: "€",
require_symbol: false,
decimal_separator: ",",
thousands_separator: "."
});
validator.isCurrency("$1,234,567.89", {
symbol: "$",
require_symbol: true,
decimal_separator: ".",
thousands_separator: ","
});
validator.isCurrency("1000", {
allow_decimal: false,
allow_negatives: false
});
Оба метода:
validator.isDecimal("$100"); // false
Ошибка заключается в попытке валидировать формат, содержащий символы.
validator.isCurrency("1000,50"); // false
без указания decimal_separator.
Конфликтующие параметры (например, require_decimal и
allow_decimal: false) приводят к логически несовместимым
проверкам, что делает результат всегда отрицательным.