Десятичные числа в JavaScript и в веб-приложениях в целом представлены строковым или числовым значением с плавающей точкой, содержащим разделитель дробной части. При обработке пользовательского ввода основной проблемой становится неоднозначность формата: допустимость ведущих нулей, наличие знака, использование точки или запятой, ограничение количества знаков после разделителя.
Библиотека validator.js предоставляет набор инструментов для строгой проверки строковых значений, включая специализированную функцию проверки десятичных чисел.
Основной метод для работы с десятичными значениями —
isDecimal.
const validator = require('validator');
validator.isDecimal('123.45');
Метод возвращает:
true — если строка соответствует формату десятичного
числаfalse — если формат нарушенБазовая проверка ориентирована на строковое представление числа и не выполняет приведение типов.
По умолчанию isDecimal допускает:
Примеры:
validator.isDecimal('10'); // true
validator.isDecimal('10.5'); // true
validator.isDecimal('0.123'); // true
Примеры, которые не проходят проверку:
validator.isDecimal('10,5'); // false
validator.isDecimal('10.'); // false
validator.isDecimal('.5'); // false
validator.isDecimal('abc'); // false
Функция поддерживает объект настроек, позволяющий адаптировать поведение под различные сценарии обработки данных.
Определяет допустимое количество знаков после разделителя.
validator.isDecimal('12.345', { decimal_digits: '1,3' });
Форматы задания:
"1" — строго 1 знак после точки"1,3" — диапазон от 1 до 3 знаков"*" — любое количество знаковПримеры:
validator.isDecimal('12.3', { decimal_digits: '2,4' }); // false
validator.isDecimal('12.34', { decimal_digits: '2,4' }); // true
validator.isDecimal('12.3456', { decimal_digits: '2,4' }); // true
Определяет обязательность наличия дробной части.
validator.isDecimal('10', { force_decimal: true });
Поведение:
true — обязательное наличие дробной частиfalse или отсутствие — дробная часть необязательнаПримеры:
validator.isDecimal('10', { force_decimal: true }); // false
validator.isDecimal('10.0', { force_decimal: true }); // true
Позволяет учитывать локальные форматы чисел, где разделителем может выступать запятая.
validator.isDecimal('10,5', { locale: 'de-DE' });
Примеры локалей:
en-US — точка как разделитель дробной частиde-DE — запятая как разделительПримеры:
validator.isDecimal('10.5', { locale: 'en-US' }); // true
validator.isDecimal('10,5', { locale: 'en-US' }); // false
validator.isDecimal('10,5', { locale: 'de-DE' }); // true
При работе с десятичными числами важно учитывать, что проверка ориентирована исключительно на строковое представление. Это означает:
Примеры:
validator.isDecimal('-10.5'); // false
validator.isDecimal('1e5'); // false
validator.isDecimal(' 10.5 '); // false
В библиотеке присутствует также метод isFloat, который
часто используется для аналогичных задач, однако различие заключается в
области допустимых форматов:
isDecimal — более строгая проверка десятичной
записиisFloat — допускает научную нотацию и более широкий
диапазон представленийvalidator.isFloat('1e5'); // true
validator.isDecimal('1e5'); // false
validator.isDecimal('199.99', { decimal_digits: '1,2' });
Используется для контроля корректного ввода сумм, где допустим фиксированный диапазон копеек.
validator.isDecimal('0.75', { force_decimal: true });
Применяется при работе с метрическими значениями, где целые числа считаются некорректными.
validator.isDecimal('12,50', { locale: 'ru-RU' });
Используется в формах, адаптированных под региональные стандарты представления чисел.
В реальных системах валидация десятичных чисел часто комбинируется с дополнительными проверками библиотеки.
Пример последовательной проверки:
validator.isNumeric(value);
validator.isDecimal(value, { decimal_digits: '1,2' });
Такой подход позволяет сначала отсечь явно некорректные значения, а затем применить строгие правила формата.
При интеграции в формы ввода важно учитывать, что данные поступают в
виде строк. Даже если поле HTML типа number, на уровне
JavaScript значение остаётся строковым.
function validatePrice(value) {
return validator.isDecimal(value, {
decimal_digits: '1,2',
force_decimal: false
});
}
Функция не выбрасывает исключений. Любое несоответствие формату
приводит к возврату false, что упрощает интеграцию в
цепочки валидации и middleware-слои серверных приложений.
const result = validator.isDecimal(null); // false
Допустимые и недопустимые случаи:
validator.isDecimal('0.0'); // true
validator.isDecimal('00.1'); // true (в некоторых конфигурациях)
validator.isDecimal('.1'); // false
validator.isDecimal('1.'); // false
Поведение может уточняться через параметры
decimal_digits и force_decimal, однако базовое
правило требует наличия обеих частей числа при использовании строгого
режима.
Использование единой библиотеки для проверки десятичных значений на
клиенте и сервере снижает вероятность расхождения логики обработки
данных. Валидация на основе isDecimal часто включается
в:
Строгая строковая проверка обеспечивает предсказуемость результата вне зависимости от среды выполнения.