В библиотеке validator.js методы toInt и
toFloat используются для преобразования строковых значений
в числовые типы Integer и Float. Эти функции
решают задачу нормализации входных данных, когда пользовательские
значения поступают в виде строк, но в дальнейшем должны обрабатываться
как числа.
Особенность подхода validator.js заключается в том, что преобразование выполняется с учётом строгой валидации входных данных: некорректные строки не приводятся к числам автоматически в «размытом» виде, а либо очищаются по правилам, либо возвращают ожидаемые крайние значения.
Метод toInt(value, radix) преобразует строковое
представление числа в целое число. В основе используется поведение,
близкое к parseInt, но с дополнительной нормализацией
входа.
toInt(value, radix)
value — значение, которое требуется преобразовать
(обычно строка)radix — основание системы счисления (по умолчанию
10)Метод предварительно приводит значение к строке, что позволяет обрабатывать числа, переданные в разных типах:
import { toInt } from 'validator';
toInt('42'); // 42
toInt(' 42 '); // 42
toInt(42); // 42
toInt('0042'); // 42
Если строка содержит недопустимые символы, они игнорируются после первого некорректного участка:
toInt('42px'); // 42
toInt('px42'); // NaN
Важное поведение связано с обработкой отрицательных чисел:
toInt('-42'); // -42
toInt('-42px'); // -42
Параметр radix задаёт систему счисления:
toInt('1010', 2); // 10 (двоичная система)
toInt('A', 16); // 10 (шестнадцатеричная система)
При отсутствии явного указания radix используется десятичная система.
Если вход не может быть интерпретирован как число, результатом
становится NaN:
toInt('abc'); // NaN
toInt(''); // NaN
toInt(null); // NaN
При этом поведение остаётся предсказуемым и не приводит к неявным преобразованиям в 0, как это происходит в некоторых встроенных JavaScript-операциях.
Метод toFloat(value) преобразует входное значение в
число с плавающей точкой. Внутренне используется логика, аналогичная
parseFloat, но с унифицированной обработкой строк и типов
данных.
toFloat(value)
value — значение для преобразованияМетод извлекает числовую часть строки, начиная с первого допустимого символа:
import { toFloat } from 'validator';
toFloat('3.14'); // 3.14
toFloat(' 3.14 '); // 3.14
toFloat(3.14); // 3.14
Поддерживаются дробные значения:
toFloat('10.5'); // 10.5
toFloat('-10.5'); // -10.5
Как и в случае с toInt, символы после валидной числовой
части игнорируются:
toFloat('3.14px'); // 3.14
toFloat('2.71e10'); // 27100000000
Если строка начинается с некорректного символа, преобразование невозможно:
toFloat('px3.14'); // NaN
toFloat('abc'); // NaN
Метод корректно обрабатывает научную нотацию:
toFloat('1e3'); // 1000
toFloat('2.5e2'); // 250
toFloat('-1e-2'); // -0.01
Это делает toFloat удобным инструментом при работе с
числовыми значениями из API, где часто используется экспоненциальная
форма записи.
Несмотря на схожесть поведения, методы решают разные задачи:
toInt ориентирован на целые числа и обрезает дробную
частьtoFloat сохраняет точность дробных значенийПримеры различий:
toInt('3.99'); // 3
toFloat('3.99'); // 3.99
При этом оба метода не выполняют округление в математическом смысле —
дробная часть в toInt просто игнорируется.
Оба метода приводят вход к строковому виду перед обработкой. Это обеспечивает единообразие поведения:
toInt(true); // NaN
toFloat(true); // NaN
toInt(false); // NaN
toFloat(false); // NaN
Объекты также не приводятся к числам автоматически:
toInt({}); // NaN
toFloat({}); // NaN
Массивы интерпретируются как строки:
toInt(['42']); // 42
toFloat(['3.14']); // 3.14
Использование toInt и toFloat в
validator.js позволяет стандартизировать входные данные перед дальнейшей
обработкой, например при работе с формами или API:
const age = toInt(req.body.age);
const price = toFloat(req.body.price);
Такой подход снижает риск некорректных преобразований, характерных для нестрогих операций приведения типов в JavaScript.
Оба метода могут возвращать NaN, что требует последующей
проверки:
const value = toInt('abc');
if (Number.isNaN(value)) {
// обработка некорректного значения
}
В validator.js отсутствует скрытая подмена NaN на другие
значения, что делает поведение предсказуемым при обработке ошибок
ввода.