Методы isEmpty и isLength

Метод isEmpty в библиотеке validator.js используется для определения того, считается ли переданное значение «пустым» с точки зрения логики валидации строковых данных. Основная задача метода — унифицировать поведение при обработке различных входных значений, которые могут приходить из форм, API-запросов или пользовательского ввода.

Общая сигнатура

isEmpty(input, options)
  • input — проверяемое значение, обычно строка
  • options — необязательный объект конфигурации

Поведение по умолчанию

Метод трактует как пустые следующие значения:

  • пустую строку ""
  • строку, состоящую только из пробелов (зависит от опций)
  • null
  • undefined

Пример базового использования:

validator.isEmpty("");
// true

validator.isEmpty("hello");
// false

validator.isEmpty(null);
// true

validator.isEmpty(undefined);
// true

Такое поведение позволяет унифицировать проверку данных без необходимости вручную обрабатывать null и undefined.

Работа с пробелами

Ключевой аспект метода — обработка пробельных символов. По умолчанию строка, содержащая пробелы, не всегда считается пустой, поскольку пробел — это символ.

Для управления этим поведением используется опция ignore_whitespace.

validator.isEmpty("   ", { ignore_whitespace: true });
// true

validator.isEmpty("   ", { ignore_whitespace: false });
// false

При ignore_whitespace: true строка предварительно очищается от пробелов, и только затем проверяется на пустоту. Это особенно важно при обработке пользовательского ввода, где случайные пробелы не должны влиять на логику валидации.

Важные особенности поведения

Метод не выполняет глубокую проверку структур данных. Он не предназначен для работы с объектами или массивами как с коллекциями значений. Если передать массив или объект, поведение зависит от приведения типа к строке:

validator.isEmpty([]); 
// true (приводится к "")

validator.isEmpty({}); 
// false (приводится к "[object Object]")

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

Типичные сценарии использования

Метод isEmpty применяется в ситуациях:

  • проверка обязательных полей формы
  • фильтрация необязательных параметров API
  • предварительная валидация перед использованием isLength и других проверок

Пример комбинированной логики:

if (!validator.isEmpty(username)) {
  // выполняется дальнейшая проверка
}

isLength: контроль длины строковых значений

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

Общая сигнатура

isLength(input, options)
  • input — строка, длина которой проверяется
  • options — объект с параметрами min и max

Параметры диапазона

Метод поддерживает два основных ограничения:

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

Пример использования:

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

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

validator.isLength("this is a very long string", { max: 10 });
// false

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

validator.isLength("hello", { min: 3 });
// true

validator.isLength("hello", { max: 3 });
// false

Логика проверки

Метод вычисляет длину строки через стандартное свойство length. При этом не выполняется дополнительная нормализация Unicode, что важно учитывать при работе с эмодзи и многобайтовыми символами.

validator.isLength("abc"); 
// длина = 3

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

"?".length // 2 в JavaScript

Следовательно:

validator.isLength("?", { max: 1 });
// может вернуть false

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

Метод ожидает строковый ввод. При передаче других типов происходит приведение:

validator.isLength(12345, { min: 1, max: 5 });
// true (преобразуется в "12345")

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

Типичные ошибки при использовании

Отсутствие проверки на пустоту

Частая ошибка — использование isLength без предварительной проверки на пустое значение:

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

Логически это корректно, но в некоторых сценариях требуется различать «пусто» и «не соответствует длине». Поэтому часто используется связка:

if (!validator.isEmpty(value) && validator.isLength(value, { min: 5 })) {
  // валидно
}

Неправильная граница диапазона

Передача некорректных значений min и max может приводить к непредсказуемым результатам:

validator.isLength("test", { min: 10, max: 5 });
// логически некорректный диапазон

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

Практическое применение валидации длины

Метод широко используется в следующих контекстах:

  • ограничение имени пользователя
  • проверка пароля
  • контроль длины описаний и комментариев
  • валидация заголовков и текстовых полей

Пример проверки пароля:

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

Пример проверки имени:

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

Взаимодействие isEmpty и isLength в логике валидации

Совместное использование isEmpty и isLength формирует базовый слой проверки текстовых данных. Эти методы решают разные задачи и дополняют друг друга:

  • isEmpty определяет наличие значения
  • isLength проверяет его структурную корректность

Типовой порядок обработки данных:

  1. Проверка на пустоту
  2. Проверка длины
  3. Дополнительные правила (формат, символы, регулярные выражения)

Пример логики:

if (
  !validator.isEmpty(email) &&
  validator.isLength(email, { min: 5, max: 254 })
) {
  // дальнейшая обработка
}

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