Библиотека Validator.js предоставляет гибкую систему настройки поведения валидации через параметры конструктора и статические методы. Базовая конфигурация задаётся при создании экземпляра валидатора и определяет, как будут интерпретироваться правила, формироваться сообщения об ошибках и обрабатываться данные.
Конструктор принимает следующую структуру:
const Validator = require('validatorjs');
const validation = new Validator(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'
};
Сообщения имеют иерархию:
Validator.setMessagesГлобальная настройка:
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.
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 — допустимость nullsometimes (в кастомных реализациях) — условная
проверкаКомбинация этих правил формирует поведение валидатора при частично заполненных объектах.
Validator.js позволяет использовать зависимости между полями:
const rules = {
password: 'required',
password_confirmation: 'same:password'
};
Такая конфигурация обеспечивает согласованность данных внутри одного набора.
Конфигурация Validator.js формируется из нескольких уровней:
Каждый слой влияет на поведение системы валидации и может использоваться независимо или совместно в зависимости от архитектуры приложения.