validator.js содержит набор функций, ориентированных на проверку и нормализацию строковых значений, которые часто приходят из форм, HTTP-запросов и внешних API. Работа с числами в этой библиотеке строится вокруг идеи, что вход почти всегда является строкой, а преобразование в числовой тип должно быть предсказуемым и контролируемым.
В JavaScript исходные данные для валидации чаще всего представлены строками. Это связано с тем, что протоколы передачи данных (HTTP, JSON, form-data) не сохраняют строгую типизацию. Поэтому числовые преобразования в validator.js реализованы как отдельный слой, отделённый от проверки формата.
Основные задачи:
Внутри библиотеки преобразование не происходит автоматически при валидации: функции проверки и функции преобразования разделены.
Функции, связанные с числами, делятся на две категории:
isInt,
isFloat, isNumerictoInt,
toFloatТакое разделение исключает ситуацию, при которой строка неожиданно становится числом без явного намерения.
Функция isNumeric предназначена для проверки того, что
строка может быть интерпретирована как число. Однако она не выполняет
преобразование и не гарантирует строгую типизацию.
Особенности:
Number.isFinite.Пример логики:
"123" → допустимо"12.3" → допустимо"12e3" → допустимо"abc" → недопустимоПри этом результатом всегда остаётся строка, а не число.
Функция toInt используется для явного приведения строки
к целому числу.
Поведение зависит от параметров:
Особенности реализации:
parseInt, но с
более предсказуемой обработкой входных данных;Типичные преобразования:
"42" → 42"42.9" → 42" 42abc" → 42"abc42" → NaNОдним из ключевых аспектов является параметр radix — основание системы счисления.
Поддерживаемые варианты:
Пример логики:
"11" при radix 2 → 3"ff" при radix 16 → 255Игнорирование radix может приводить к неоднозначному поведению, особенно при строках с ведущими нулями.
Функция toFloat применяется для преобразования значений
с плавающей точкой.
Особенности:
Примеры поведения:
"12.34" → 12.34"12.34abc" → 12.34"1e3" → 1000"abc" → NaNВ отличие от toInt, дробная часть не отбрасывается, а
сохраняется в соответствии с IEEE 754 представлением чисел
JavaScript.
Ключевой принцип архитектуры validator.js заключается в разделении:
Это предотвращает ситуации, при которых:
При невозможности преобразования результатом становится
NaN.
Типичные случаи:
Особенность Jav * aScript: NaN не равен самому себе,
поэтому для проверки результата требуется отдельная логика.
Механизм преобразования ориентирован на последовательное чтение строки:
Это поведение отличается от строгих парсеров, которые требуют полного соответствия формату.
JavaScript допускает неявное преобразование:
"10" * 2 → 20"10" + 2 → "102"validator.js избегает таких сценариев, требуя явного вызова
toInt или toFloat. Это снижает риск ошибок при
обработке пользовательского ввода.
Пустая строка представляет отдельный случай:
"" → NaN при преобразовании;" " также считаются невалидными после
тримминга.Это поведение важно для форм, где отсутствие значения не должно интерпретироваться как ноль.
Преобразование учитывает ограничения Jav * aScript:
Number.MAX_SAFE_INTEGER;Number.MIN_SAFE_INTEGER.При выходе за пределы безопасной точности возможны:
После преобразования важно учитывать, что:
Пример:
"0012" → 12"12.3400" → 12.34Числовая конвертация в validator.js применяется в сценариях:
Основная цель — отделить проверку входа от бизнес-логики приложения, обеспечивая предсказуемость результата преобразования.