Валидация минимальной и максимальной длины

Валидация длины строк является одной из базовых операций при обработке пользовательского ввода. В библиотеке Validator.js для этого используется набор функций, позволяющих проверять минимальную и максимальную длину строки, а также комбинировать ограничения в едином правиле.

Основной инструмент для работы с длиной — функция isLength, которая позволяет задать диапазон допустимых значений через объект параметров.

Функция isLength и диапазон значений

Функция isLength(str, options) принимает строку и объект настроек, содержащий границы длины:

  • min — минимально допустимая длина
  • max — максимально допустимая длина

Если значение выходит за пределы диапазона, проверка возвращает false.

import validator fr om 'validator';

validator.isLength('Hello', { min: 3, max: 10 });
// true

validator.isLength('Hi', { min: 3, max: 10 });
// false

validator.isLength('This is a very long string', { min: 3, max: 10 });
// false

При отсутствии одного из параметров проверка становится односторонней. Например, можно задать только минимальную длину:

validator.isLength('Validator', { min: 5 });
// true

validator.isLength('Hi', { min: 5 });
// false

Или только максимальную:

validator.isLength('Short text', { max: 20 });
// true

validator.isLength('This text is definitely too long for lim it', { max: 20 });
// false

Поведение при работе с Unicode

Validator.js учитывает длину строки в символах JavaScript, а не в байтах. Это важно при работе с эмодзи и символами Unicode, которые могут занимать больше одного байта.

validator.isLength('???', { min: 3, max: 3 });
// true

Однако при наличии сложных Unicode-комбинаций (например, составных эмодзи) поведение может отличаться от визуального восприятия длины строки.

Разделение логики минимальной и максимальной длины

Хотя isLength является универсальным решением, библиотека также часто используется в сочетании с отдельными проверками, чтобы повысить читаемость логики валидации.

Проверка минимальной длины через isLength

function isMinLength(str, min) {
  return validator.isLength(str, { min });
}

isMinLength('example', 3);
// true

Проверка максимальной длины через isLength

function isMaxLength(str, max) {
  return validator.isLength(str, { max });
}

isMaxLength('example', 10);
// true

Такой подход упрощает композицию правил при построении сложных схем валидации.

Частые сценарии применения

Ограничение длины используется в большинстве форм пользовательского ввода:

  • имена пользователей
  • пароли
  • заголовки
  • описания
  • комментарии

Пример валидации имени пользователя:

const username = 'alex_dev';

const validUsername = validator.isLength(username, {
  min: 3,
  max: 20
});

Для паролей часто задаются более строгие ограничения:

const password = 'qwerty123';

const validPassword = validator.isLength(password, {
  min: 8,
  max: 64
});

Особенности и ограничения проверки

При использовании isLength необходимо учитывать ряд особенностей:

  • пробелы учитываются как символы
  • управляющие символы также входят в длину строки
  • функция не выполняет предварительную очистку данных
  • null и undefined приводят к ошибке или возвращению false в зависимости от версии и окружения

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

const value = (input || '').trim();

validator.isLength(value, { min: 1, max: 50 });

Использование в цепочках валидации

В реальных сценариях проверка длины комбинируется с другими методами Validator.js:

const email = 'user@example.com';
const name = 'John';

const isValid =
  validator.isEmail(email) &&
  validator.isLength(name, { min: 2, max: 30 });

Такой подход позволяет формировать последовательные правила без необходимости создания сложных структур.

Альтернативные подходы к проверке длины

Помимо isLength, иногда применяется прямое использование свойства length:

if (str.length >= 3 && str.length <= 10) {
  // допустимая длина
}

Однако использование Validator.js обеспечивает единообразие логики и упрощает поддержку кода, особенно в проектах с множественными правилами валидации.

Byte-length валидация

В отдельных случаях важна не символная, а байтовая длина строки. Для этого используется отдельная функция:

validator.isByteLength('Hello', { min: 1, max: 10 });

Она применяется, например, при ограничениях на уровне баз данных или сетевых протоколов, где размер данных определяется в байтах, а не в символах.