Методы isInt и isFloat

Метод isInt в библиотеке validator.js используется для проверки, является ли переданное значение целым числом. Поддерживается работа как со строковыми представлениями чисел, так и с числовыми типами, однако основная обработка ориентирована на строки, поскольку именно такой формат чаще поступает из пользовательского ввода.

Сигнатура

isInt(value [, options])
  • value — проверяемое значение (строка или число)
  • options — объект дополнительных ограничений

Базовое поведение

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

validator.isInt('42');       // true
validator.isInt('-42');      // true
validator.isInt('42.0');     // false
validator.isInt('42.5');     // false
validator.isInt('abc');      // false

Проверка строго ориентируется на формат, а не на приведение типов. Строка "42" считается допустимой, тогда как " 42 " или "042" могут требовать дополнительных настроек.

Параметры options

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

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

Примеры:

validator.isInt('4', { min: 5 });    // false
validator.isInt('5', { min: 5 });    // true
validator.isInt('21', { max: 20 });   // false

Строгость формата

validator.isInt('042', { allow_leading_zeroes: false });
  • allow_leading_zeroes — разрешает или запрещает ведущие нули

Поведение:

validator.isInt('042'); // true (по умолчанию)
validator.isInt('042', { allow_leading_zeroes: false }); // false

Особенности обработки

  • Пустая строка всегда возвращает false
  • Значения с пробелами не считаются валидными без предварительной обработки
  • Научная нотация (1e3) не распознаётся как целое число
  • Дробные значения, даже равные математически целым (10.0), считаются невалидными

isFloat

Метод isFloat предназначен для проверки чисел с плавающей точкой. Он применяется для валидации как целых, так и дробных значений, поскольку любое целое число может быть представлено как float.

Сигнатура

isFloat(value [, options])
  • value — проверяемое значение
  • options — дополнительные ограничения формата

Базовая проверка

validator.isFloat('3.14');   // true
validator.isFloat('-3.14');  // true
validator.isFloat('10');     // true
validator.isFloat('10.0');   // true
validator.isFloat('abc');    // false

Особенность метода заключается в том, что целые числа также проходят проверку как корректные float-значения.

Параметры options

Диапазон значений

validator.isFloat('3.5', { min: 2, max: 5 });
  • min — нижняя граница
  • max — верхняя граница

Примеры:

validator.isFloat('1.9', { min: 2 });  // false
validator.isFloat('2.0', { min: 2 });  // true
validator.isFloat('5.1', { max: 5 });   // false

Ограничение десятичных знаков

validator.isFloat('3.1415', { decimal_digits: '0,2' });
  • decimal_digits — ограничение количества знаков после запятой Форматы:

    • "1,3" — от 1 до 3 знаков
    • "2" — строго 2 знака

Примеры:

validator.isFloat('3.1', { decimal_digits: '1,2' });   // true
validator.isFloat('3.141', { decimal_digits: '1,2' }); // false

Локализация десятичного разделителя

validator.isFloat('3,14', { locale: 'de-DE' });
  • locale — определяет формат десятичного разделителя

Примеры:

validator.isFloat('3.14', { locale: 'en-US' }); // true
validator.isFloat('3,14', { locale: 'de-DE' }); // true

Поведенческие различия isInt и isFloat

Область допустимых значений

  • isInt — только целые числа без дробной части
  • isFloat — любые числа, включая целые и дробные
validator.isInt('10');   // true
validator.isFloat('10'); // true
validator.isInt('10.0');   // false
validator.isFloat('10.0'); // true

Форматирование строки

Оба метода работают со строковым представлением, но интерпретируют формат по-разному:

  • isInt отклоняет любые дробные символы
  • isFloat допускает точку или запятую как разделитель дробной части

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

Оба метода поддерживают min и max, однако смысл проверки зависит от типа числа:

  • для isInt сравнение происходит в целочисленном контексте
  • для isFloat учитываются дробные значения без округления

Типичные сценарии применения

Валидация пользовательского ввода

validator.isInt(req.body.age, { min: 0, max: 120 });
validator.isFloat(req.body.price, { min: 0 });

Проверка параметров API

  • идентификаторы (isInt)
  • координаты, цены, коэффициенты (isFloat)

Контроль точности чисел

validator.isFloat(value, { decimal_digits: '0,2' });

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


Поведение при некорректных данных

Оба метода демонстрируют строгую валидацию:

  • null и undefined всегда возвращают false
  • массивы и объекты не приводятся к строке автоматически
  • строки с посторонними символами считаются невалидными
validator.isInt('123abc');   // false
validator.isFloat('12.3.4'); // false