Валидация длины строк и бинарных данных в Validator.js реализуется через набор специализированных методов, позволяющих задавать строгие ограничения на минимальное и максимальное количество символов или байт, а также учитывать особенности кодировки и форматирования входных данных.
Основным инструментом контроля длины текстовых значений является
метод isLength. Он позволяет задать диапазон допустимой
длины строки в символах:
const validator = require('validator');
validator.isLength('Hello', { min: 1, max: 10 }); // true
validator.isLength('Hello World', { min: 1, max: 5 }); // false
Метод оперирует именно символами Unicode, что важно при работе с многоязычными данными. Однако в реальных системах это может создавать расхождения между ожидаемой и фактической длиной, особенно при наличии эмодзи или символов за пределами базовой латиницы.
Ограничения могут применяться независимо:
validator.isLength('Data', { min: 3 }); // true
validator.isLength('Hi', { min: 3 }); // false
validator.isLength('Example', { max: 10 }); // true
validator.isLength('This is a very long string', { max: 10 }); // false
Такой подход используется при проверке полей форм, где требуется обязательное наличие данных или ограничение объема вводимого текста.
Для систем, где критична именно память или сетевой размер
передаваемых данных, применяется метод isByteLength. Он
учитывает фактическое количество байт, а не символов:
validator.isByteLength('Hello', { min: 1, max: 10 }); // true
validator.isByteLength('Привет', { min: 1, max: 10 }); // может быть false в UTF-8
В UTF-8 один символ может занимать от 1 до 4 байт, что делает проверку на основе байтов более строгой. Это особенно важно при работе с API, ограничивающими размер payload.
Различие между isLength и isByteLength
становится критическим при обработке интернационального текста:
isLength — логическая длина строки (символы)isByteLength — физический размер строки (байты)Пример расхождения:
validator.isLength('?', { max: 1 }); // true
validator.isByteLength('?', { max: 1 }); // false
Эмодзи занимает несколько байт, несмотря на один визуальный символ.
Перед применением ограничений длины часто требуется нормализация входных данных. В JavaScript одинаковые визуально строки могут иметь разное внутреннее представление:
const text = 'é'; // может быть один символ или два (e + accent)
validator.isLength(text, { min: 1, max: 1 });
Без нормализации возможны ошибки при проверке одинаковых по смыслу значений. Валидация становится нестабильной при работе с комбинированными символами.
Длина строки может искажаться из-за пробелов, переносов строк и табуляции. Validator.js не выполняет автоматическую очистку данных перед проверкой длины.
Типичный подход включает предварительную обработку:
const value = ' text ';
validator.isLength(value.trim(), { min: 1, max: 10 });
При необходимости строгого контроля также учитываются символы переноса строки:
const value = 'line1\nline2';
validator.isLength(value, { max: 10 });
В веб-приложениях ограничения длины используются на нескольких уровнях:
Validator.js применяется преимущественно на сервере, где требуется окончательная проверка входящих данных:
if (!validator.isLength(username, { min: 3, max: 20 })) {
throw new Error('Invalid username length');
}
Такой подход предотвращает сохранение некорректных данных независимо от поведения клиентской стороны.
В реальных системах ограничения часто комбинируются с другими правилами:
validator.isLength(password, { min: 8, max: 64 }) &&
validator.matches(password, /[A-Z]/) &&
validator.matches(password, /[0-9]/);
В подобных сценариях длина становится лишь одним из факторов оценки корректности значения.
Validator.js работает со строками, поэтому при проверке массивов используется их сериализация или отдельная логика:
const tags = ['js', 'node', 'validator'];
validator.isLength(tags.join(','), { max: 50 });
Такой подход позволяет контролировать косвенную длину структурированных данных, хотя и требует дополнительной обработки.
При использовании ограничений длины часто возникают системные ошибки:
trim() перед проверкойКорректная валидация требует учета всех перечисленных факторов одновременно, особенно в распределенных системах и API-интерфейсах.
Ограничения длины задаются исходя из контекста данных:
Validator.js предоставляет лишь механизм проверки, тогда как бизнес-логика определяет допустимые диапазоны.