Структура методов валидации

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

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

Базовая структура методов

Методы валидации в Validator.js можно разделить на несколько категорий:

  • проверочные функции (predicate validators);
  • функции нормализации;
  • функции преобразования строк;
  • комбинированные проверки;
  • специализированные валидаторы форматов.

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

Проверочные функции (Predicate validators)

Наиболее многочисленная группа методов. Их задача — определить соответствие строки заданному критерию.

Общий формат:

validator.isEmail(str);
validator.isURL(str);
validator.isNumeric(str);

Характеристики:

  • входной параметр почти всегда строка;
  • возврат — булево значение;
  • отсутствие побочных эффектов;
  • строгая проверка формата.

Примеры логических групп:

Проверка формата данных

  • isEmail — проверка корректности email-адреса;
  • isURL — проверка структуры URL;
  • isIP — проверка IPv4 и IPv6;
  • isJWT — проверка JSON Web Token.

Проверка числовых значений

  • isNumeric — строка содержит число;
  • isInt — целое число;
  • isFloat — число с плавающей точкой;
  • isDecimal — десятичный формат.

Проверка текстовых ограничений

  • isLength — длина строки в заданных пределах;
  • isEmpty — пустая строка или строка пробелов;
  • isAlpha — только буквенные символы;
  • isAlphanumeric — буквы и цифры.

Проверка дат и временных значений

  • isDate — валидность даты;
  • isAfter — дата позже указанной;
  • isBefore — дата раньше указанной.

Функции нормализации

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

Характерная особенность — возврат модифицированной строки.

Основные методы:

  • normalizeEmail — приведение email к каноническому виду;
  • trim — удаление пробелов по краям строки;
  • escape — экранирование опасных символов;
  • stripLow — удаление непечатаемых символов.

Особенности поведения:

  • не выполняют валидацию как таковую;
  • часто используются перед проверочными функциями;
  • могут изменять структуру строки.

Методы преобразования строк

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

Основные примеры:

  • преобразование регистра;
  • удаление или замена символов;
  • приведение к безопасному формату.

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

Специализированные валидаторы форматов

Эта группа методов ориентирована на проверку строго определённых стандартов и протоколов.

Примеры:

  • isUUID — проверка универсального идентификатора;
  • isHexColor — проверка HEX-цвета;
  • isLatLong — координаты широты и долготы;
  • isMimeType — проверка MIME-типа;
  • isISO8601 — формат даты ISO.

Особенность этих методов заключается в жёсткой зависимости от спецификаций RFC или международных стандартов.

Комбинирование проверок

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

Пример логики композиции:

if (validator.isEmail(value) && validator.isLength(value, { min: 5, max: 255 })) {
    // значение соответствует условиям
}

Такая модель делает библиотеку гибкой, но переносит ответственность за композицию на уровень прикладного кода.

Внутренние принципы реализации

Структура методов Validator.js основана на нескольких инженерных принципах:

1. Чистота функций

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

2. Строгая типизация входа

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

3. Регулярные выражения как основа

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

  • email;
  • URL;
  • телефонные номера;
  • UUID.

4. Минимизация побочных эффектов

Методы не изменяют глобальные переменные и не взаимодействуют с окружением.

Типизация результатов и поведение ошибок

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

  • возвращается true или false;
  • при нормализации возвращается изменённая строка;
  • некорректный ввод часто приводит к false, а не к ошибке выполнения.

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

Взаимодействие с типами данных JavaScript

Несмотря на работу преимущественно со строками, библиотека учитывает особенности Jav * aScript:

  • неявное приведение чисел к строкам;
  • обработка null и undefined;
  • устойчивость к пустым значениям.

Пример поведения:

validator.isEmail(null); // false
validator.isEmail(undefined); // false
validator.isNumeric("123"); // true

Группировка методов по назначению

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

  • идентификация (email, IP, UUID);
  • числовые проверки (int, float, numeric);
  • строковые ограничения (length, empty);
  • дата и время (isDate, isAfter, isBefore);
  • сетевые форматы (URL, JWT);
  • санитаризация (trim, escape, normalizeEmail).

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

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

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

  • некорректные строки приводят к false;
  • неподходящие типы приводятся или отклоняются;
  • частичная валидность не допускается.

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