Опции конфигурации

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

Конструктор принимает следующую структуру:

const Validator = require('validatorjs');

const validation = new Validator(data, rules, messages, attributes);
  • data — объект с проверяемыми данными
  • rules — набор правил валидации
  • messages — пользовательские сообщения об ошибках
  • attributes — переименование полей для вывода

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


Пользовательские сообщения об ошибках

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

const messages = {
  required: 'Поле :attribute обязательно для заполнения',
  min: 'Поле :attribute должно содержать минимум :min символов',
  max: 'Поле :attribute не должно превышать :max символов'
};

const v = new Validator(data, rules, messages);

Подстановка плейсхолдеров

Validator.js поддерживает динамическую подстановку значений:

  • :attribute — имя поля
  • :min, :max — параметры правила
  • :value — текущее значение

Пример:

const messages = {
  between: 'Значение :attribute должно быть между :min и :max, получено :value'
};

Приоритет сообщений

Сообщения имеют иерархию:

  1. Переданные в конструкторе
  2. Глобально установленные через Validator.setMessages
  3. Стандартные встроенные сообщения

Глобальная настройка:

Validator.setMessages('ru', {
  required: 'Поле обязательно'
});

Переименование атрибутов

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

const attributes = {
  email: 'электронная почта',
  password: 'пароль'
};

const v = new Validator(data, rules, messages, attributes);

Результат:

Поле "электронная почта" обязательно для заполнения

Этот слой конфигурации особенно важен при локализации интерфейса и отделении API-структуры от пользовательского представления.


Режим строгой валидации

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

const v = new Validator(data, rules, messages, attributes, {
  strict: true
});

В строгом режиме:

  • уменьшается автоматическое приведение типов
  • более жёстко проверяются пустые значения
  • усиливается проверка структур массивов и объектов

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


Поведение при ошибках

Конфигурация не включает явный параметр “stopOnFirstError”, однако поведение можно контролировать через логику использования API.

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

v.passes(); // возвращает true/false
v.fails();  // противоположное значение

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

Доступ к ошибкам:

v.errors.all();
v.errors.first('email');
v.errors.has('password');

Локализация и языковая конфигурация

Validator.js поддерживает многоязычные сообщения через механизм языков.

Установка языка:

Validator.useLang('ru');

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

Validator.setMessages('ru', {
  required: 'Обязательное поле',
  email: 'Некорректный email'
});

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


Расширение правил валидации

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

Синхронное правило

Validator.register('startsWithA', function(value) {
  return value.startsWith('A');
}, 'Поле :attribute должно начинаться с A');

Асинхронное правило

Validator.registerAsync('exists', function(value, attribute, req, passes) {
  setTimeout(() => {
    if (value === 'admin') {
      passes(false, 'Значение занято');
    } else {
      passes();
    }
  }, 500);
});

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


Имплицитные правила

Некоторые правила могут быть объявлены как implicit, то есть они выполняются даже при отсутствии значения.

Validator.registerImplicit('not_empty_string', function(value) {
  return typeof value === 'string' && value.trim() !== '';
});

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


Обработка nullable значений

Validator.js допускает использование nullable-логики, при которой значение null или undefined может быть исключено из проверки.

const rules = {
  middle_name: 'nullable|min:2'
};

При наличии nullable остальные правила применяются только при наличии значения.


Переиспользование конфигураций

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

function createUserValidator(data) {
  return new Validator(data, {
    email: 'required|email',
    password: 'required|min:8'
  }, {
    required: 'Поле обязательно'
  }, {
    email: 'email пользователя',
    password: 'пароль'
  });
}

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


Глобальная конфигурация библиотеки

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

Установка сообщений

Validator.setMessages('ru', {
  required: 'Поле обязательно для заполнения'
});

Регистрация глобальных правил

Validator.register('numeric', function(value) {
  return /^[0-9]+$/.test(value);
});

Глобальная конфигурация используется для унификации поведения во всём приложении.


Работа с ошибками как с объектом конфигурации

Объект errors является частью конфигурационного результата и предоставляет расширенный API:

v.errors.has('email');
v.errors.first('email');
v.errors.get('email');
v.errors.all();

Формат ошибок структурирован по полям, что позволяет легко интегрировать результат в UI-слой.


Динамическая модификация конфигурации

Validator.js допускает изменение правил и сообщений после создания экземпляра, однако это требует пересоздания или ручного обновления состояния.

v.rules.email = 'required|email';

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


Конфигурация через цепочки расширения

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

const baseRules = {
  email: 'required|email'
};

const extendedRules = {
  ...baseRules,
  password: 'required|min:8'
};

const v = new Validator(data, extendedRules);

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


Поведение при пустых значениях

Конфигурация правил определяет, как обрабатываются пустые значения:

  • required — обязательность поля
  • nullable — допустимость null
  • sometimes (в кастомных реализациях) — условная проверка

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


Контекстная конфигурация правил

Validator.js позволяет использовать зависимости между полями:

const rules = {
  password: 'required',
  password_confirmation: 'same:password'
};

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


Итоговая структура конфигурации

Конфигурация Validator.js формируется из нескольких уровней:

  • параметры конструктора (data, rules, messages, attributes)
  • локализация и языковые пакеты
  • глобальные сообщения и правила
  • расширенные пользовательские валидаторы
  • режимы обработки (strict, nullable, implicit)
  • объект ошибок как результат конфигурации

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