Возвращаемые значения и типы данных

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

Большая часть валидаторов ориентирована на проверку корректности данных без их изменения. В таких случаях результатом работы функции всегда выступает boolean.

Типичный пример — проверка формата email:

validator.isEmail('user@example.com')

Результат:

  • true — строка соответствует формату email
  • false — строка не проходит валидацию

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

  • isURL
  • isInt
  • isAlpha
  • isNumeric
  • isUUID

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


Строковые возвращаемые значения

Часть методов библиотеки выполняет не только проверку, но и преобразование данных. В таких случаях возвращается строка, часто модифицированная по заданным правилам.

Примеры:

validator.trim('   text   ')

Результат:

  • 'text'
validator.escape('<div>')

Результат:

  • '&lt;div&gt;'
validator.normalizeEmail('USER@Example.COM')

Результат:

  • 'user@example.com' (в зависимости от настроек нормализации)

Такие функции относятся к категории трансформеров. Их ключевая особенность — детерминированность преобразования: одинаковый вход всегда даёт одинаковый результат при одинаковых опциях.


Возвращаемые значения с учётом опций

Некоторые функции изменяют тип или формат результата в зависимости от переданных параметров. Это создаёт вариативность возвращаемых значений при сохранении общей логики.

Пример:

validator.isBoolean('true', { loose: true })

Здесь результат зависит от режима:

  • строгий режим — только 'true' и 'false'
  • “loose” режим — расширенный набор допустимых значений

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


Приведение типов входных данных

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

validator.isInt(10)

Фактически обрабатывается как:

validator.isInt('10')

Такой подход исключает неожиданные различия между типами JavaScript (number, string, boolean) и обеспечивает единообразную обработку.

Особенности:

  • null и undefined приводятся к строковому виду
  • объекты и массивы преобразуются через toString()
  • числовые значения теряют типовую природу до начала валидации

Логические результаты и их интерпретация

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

  • true — соответствие условиям проверки
  • false — любое отклонение от ожидаемого формата

Никаких промежуточных состояний или кодов ошибок не предусмотрено. Это упрощает композицию функций в цепочках логики приложения.


Особенности возврата при некорректных данных

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

  • false — для функций проверки
  • исходное или преобразованное значение — для функций трансформации

Пример:

validator.isEmail({})

Результат:

  • false
validator.trim(null)

Результат:

  • 'null'

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


Возвращаемые значения в цепочках обработки

Хотя библиотека не является классическим chainable API, её функции часто используются последовательно. В таких сценариях тип возвращаемого значения определяет дальнейшую обработку:

const value = validator.trim(input);

if (validator.isEmail(value)) {
  // обработка email
}

Здесь наблюдается разделение:

  • трансформация → строка
  • проверка → boolean

Стабильность типов и предсказуемость API

Одной из ключевых характеристик библиотеки является жёсткая фиксация типов возвращаемых значений:

  • проверки всегда возвращают boolean
  • преобразования всегда возвращают string
  • функции с расширенной логикой возвращают результат, соответствующий документированному типу

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


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

Некоторые функции нормализации email и URL могут возвращать разные строки в зависимости от флагов:

validator.normalizeEmail(email, {
  gmail_remove_dots: true
})

Результат может отличаться даже при одинаковом входе, но тип остаётся неизменным — всегда string.


Типизация в контексте JavaScript

С точки зрения JavaScript, библиотека опирается на базовые типы:

  • boolean — результат валидации
  • string — результат преобразования
  • входные данные приводятся к строковому типу до обработки

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