Библиотека validator.js предоставляет набор функций для строгой и гибкой проверки строковых значений, которые должны интерпретироваться как числа. Особенность подхода заключается в том, что входные данные рассматриваются как строки, даже если по смыслу они представляют числовые значения, что позволяет учитывать реальные сценарии получения данных из форм, API и пользовательского ввода.
Функция 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() используется для проверки целых чисел в
строковом виде.
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() проверяет числа с десятичной
частью.
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
Поддержка локалей критична при обработке пользовательских форм, особенно в международных приложениях.
Часто требуется проверка не только формата, но и принадлежности значения к диапазону.
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 по умолчанию
Экспоненциальная форма особенно важна при работе с результатами вычислений и финансовыми данными.
JavaScript допускает специальные числовые значения:
NaNInfinity-InfinityValidator.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 | дробные | да | да | да |
Часто числовая валидация используется вместе с другими функциями:
trim() — очистка пробеловtoFloat() / toInt() (если используется
внешняя логика) — преобразование после проверкиescape() — при обработке пользовательского вводаКомбинированный подход снижает риск некорректных данных на уровне бизнес-логики.