Проверка числовых значений

Библиотека validator.js предоставляет набор функций для строгой и гибкой проверки строковых значений, которые должны интерпретироваться как числа. Особенность подхода заключается в том, что входные данные рассматриваются как строки, даже если по смыслу они представляют числовые значения, что позволяет учитывать реальные сценарии получения данных из форм, API и пользовательского ввода.


Базовая проверка на числовой формат

isNumeric

Функция isNumeric() используется для проверки того, что строка может быть интерпретирована как число. Она допускает различные форматы записи:

import validator from 'validator';

validator.isNumeric('123');        // true
validator.isNumeric('00123');      // true
validator.isNumeric('-123');       // true (при соответствующих опциях)
validator.isNumeric('12.3');       // false по умолчанию
validator.isNumeric('12e3');       // false по умолчанию

Основное ограничение — проверяется именно строковый формат, а не тип данных JavaScript. Значение 123 (число) не проходит проверку без приведения к строке.

Опции конфигурации

validator.isNumeric('12.3', {
  no_symbols: false
});
  • no_symbols — отключает разрешение знаков +, -, десятичной точки и экспоненты
  • Поведение функции меняется в зависимости от необходимости строгой или мягкой проверки

Проверка целых чисел

isInt

Функция isInt() используется для проверки целых чисел в строковом виде.

validator.isInt('123');     // true
validator.isInt('-123');    // true
validator.isInt('123.0');   // false
validator.isInt('123a');    // false

Ограничение диапазона

validator.isInt('50', { min: 10, max: 100 }); // true
validator.isInt('5', { min: 10, max: 100 });  // false
  • min — минимально допустимое значение
  • max — максимально допустимое значение

Функция выполняет сравнение после приведения строки к числу, но только при условии, что формат строки допустим как целое число.


Проверка чисел с плавающей точкой

isFloat

Функция isFloat() проверяет числа с десятичной частью.

validator.isFloat('12.34');   // true
validator.isFloat('-0.5');    // true
validator.isFloat('10');      // true
validator.isFloat('10.');     // true (в зависимости от опций)
validator.isFloat('.5');      // true (в зависимости от опций)

Тонкая настройка поведения

validator.isFloat('0.5', {
  min: 0,
  max: 1
});

Поддерживаются ограничения диапазона, аналогично isInt.

Дополнительные параметры:

  • locale — поддержка локализованных форматов чисел (например, запятая как разделитель)
  • allow_leading_zeroes — разрешение ведущих нулей

Проверка чисел с десятичными разделителями

В реальных данных часто встречаются локализованные форматы:

  • 1,5 (европейский формат)
  • 1.5 (английский формат)
validator.isFloat('1,5', { locale: 'de-DE' }); // true
validator.isFloat('1.5', { locale: 'en-US' });  // true

Поддержка локалей критична при обработке пользовательских форм, особенно в международных приложениях.


Проверка числовых диапазонов

Часто требуется проверка не только формата, но и принадлежности значения к диапазону.

Комбинация min/max

validator.isFloat('42', { min: 10, max: 100 }); // true

Поведение при выходе за пределы

validator.isFloat('9', { min: 10 });   // false
validator.isFloat('101', { max: 100 }); // false

Диапазон применяется после успешной проверки формата числа.


Проверка на допустимость знаков и формата

Числовые строки могут включать дополнительные символы:

  • знак + или -
  • пробелы
  • экспоненциальную запись

Примеры поведения

validator.isNumeric('+123');   // true (при настройках)
validator.isNumeric('-123');   // true
validator.isNumeric(' 123 ');  // false без trim

Удаление пробелов выполняется отдельно:

validator.isNumeric(validator.trim(' 123 ')); // true

Экспоненциальная форма записи

Некоторые функции поддерживают научную нотацию:

validator.isFloat('1e3');   // true (при включённых опциях)
validator.isNumeric('1e3'); // false по умолчанию

Экспоненциальная форма особенно важна при работе с результатами вычислений и финансовыми данными.


Проверка NaN и Infinity

JavaScript допускает специальные числовые значения:

  • NaN
  • Infinity
  • -Infinity

Validator.js по умолчанию рассматривает их как недопустимые:

validator.isFloat('NaN');       // false
validator.isFloat('Infinity');  // false

Для предотвращения некорректных вычислений такие значения всегда исключаются на уровне валидации строкового ввода.


Различие между числом и строковым представлением числа

Validator.js не работает с типом number напрямую:

validator.isInt(123); // ошибка или false (в зависимости от версии)

Корректный подход:

validator.isInt(String(123)); // true

Причина — библиотека ориентирована на валидацию входных данных, а не на типизацию внутри JavaScript.


Проверка чисел с ведущими нулями

validator.isInt('00123'); // true

В некоторых системах ведущие нули недопустимы (например, идентификаторы без форматирования). Для таких случаев требуется дополнительная проверка:

/^(0|[1-9]\d*)$/.test('00123'); // false

Практические сценарии применения

Валидация возраста

validator.isInt(age, { min: 0, max: 120 });

Проверка цены

validator.isFloat(price, { min: 0 });

Контроль идентификаторов

validator.isInt(id, { min: 1 });

Типовые ошибки при проверке чисел

Передача чисел вместо строк

validator.isFloat(3.14); // некорректное поведение

Игнорирование локалей

validator.isFloat('1,5'); // false без указания locale

Отсутствие нормализации входных данных

validator.isInt(' 42 '); // false без trim

Сравнение методов проверки чисел

Метод Тип числа Поддержка дробей Диапазон Локали
isNumeric общее частично нет нет
isInt целые нет да нет
isFloat дробные да да да

Особенности поведения валидации

  • Все проверки выполняются над строками
  • Формат важнее значения
  • Допустимость символов зависит от опций
  • Результат не зависит от числовой интерпретации JavaScript

Взаимодействие с другими функциями библиотеки

Часто числовая валидация используется вместе с другими функциями:

  • trim() — очистка пробелов
  • toFloat() / toInt() (если используется внешняя логика) — преобразование после проверки
  • escape() — при обработке пользовательского ввода

Комбинированный подход снижает риск некорректных данных на уровне бизнес-логики.