Валидация в библиотеке Validator.js (чаще в реализации validatorjs для JavaScript) опирается на строго определённую структуру хранения и возврата ошибок. Основная идея заключается в том, что каждая ошибка привязана к конкретному полю, а набор сообщений формируется в виде централизованного объекта, называемого «ошибочным пакетом» (error bag).
Результат валидации формируется в виде объекта, содержащего:
Ключевой элемент — объект ошибок, где каждое поле сопоставляется с массивом строковых сообщений.
errors = {
fieldName: ["Сообщение об ошибке 1", "Сообщение об ошибке 2"]
}
Такая модель обеспечивает поддержку множественных нарушений правил для одного поля без потери информации.
Error bag представляет собой специализированную коллекцию, содержащую:
Типичная структура:
{
errors: {
name: ["Имя обязательно для заполнения"],
email: ["Email имеет некорректный формат"]
}
}
Каждый ключ соответствует имени атрибута, переданного в валидатор.
Каждое правило валидации формирует собственное сообщение при нарушении. При наличии нескольких правил на одно поле:
Пример логики:
name: required + min:3 + max:20
Результат:
name: [
"Поле обязательно",
"Минимальная длина 3 символа"
]
Сообщения формируются на основе шаблонов правил. Базовая структура сообщения содержит:
Шаблон:
:attribute :rule :parameters
Пример:
Email должен быть корректным адресом
или с параметрами:
Пароль должен содержать минимум :min символов
После интерполяции:
Пароль должен содержать минимум 8 символов
В сообщениях используются специальные маркеры:
:attribute — имя поля:min — минимальное значение:max — максимальное значение:size — фиксированный размер:value — текущее значениеПример шаблона:
Поле :attribute должно быть не меньше :min
Результат:
Поле age должно быть не меньше 18
Каждая ошибка представляется как элемент массива строк. В расширенных реализациях дополнительно могут присутствовать:
Обобщённая структура:
{
field: {
rule: "required",
message: "Поле обязательно",
type: "validation"
}
}
Однако в стандартной модели Validator.js чаще используется упрощённый формат — массив строк.
Ошибки группируются по ключам полей. При этом:
Пример:
user.email
user.password
Структура:
{
"user.email": ["Некорректный email"],
"user.password": ["Слишком короткий пароль"]
}
Для объектов и массивов применяется точечная нотация:
user.profile.age
items.0.name
Это позволяет сохранять строгую связь между структурой данных и ошибками.
Пример:
{
"user.profile.age": ["Возраст должен быть числом"]
}
Стандартные сообщения генерируются автоматически на основе набора правил:
Каждое правило имеет дефолтный шаблон сообщения, который подставляется при отсутствии пользовательской настройки.
Структура позволяет переопределять сообщения на нескольких уровнях:
Формат:
{
"email.required": "Email обязателен",
"password.min": "Пароль слишком короткий"
}
Результирующая структура ошибок остаётся неизменной — изменяется только текст сообщений.
При наличии нескольких источников сообщений применяется следующий порядок:
Таким образом обеспечивается детерминированность результата.
Результат валидации включает:
{
passes: boolean,
fails: boolean,
errors: {
field: [messages]
}
}
При этом основной акцент делается на объекте errors.
Для передачи через API структура часто сериализуется в JSON:
{
"errors": {
"email": [
"Email обязателен",
"Email имеет неверный формат"
]
}
}
Сериализация сохраняет:
При наличии нескольких правил поведение зависит от конфигурации:
Полная структура:
password: [
"Минимум 8 символов",
"Должен содержать цифру",
"Должен содержать символ"
]
В некоторых сценариях требуется объединение сообщений в одну строку:
"Email обязателен; Email имеет неверный формат"
Однако стандартная структура Validator.js сохраняет массивный формат для упрощения обработки на уровне интерфейса.
Ключевые характеристики системы сообщений:
Поддержка языков реализуется через словари сообщений:
{
required: "Поле обязательно",
email: "Некорректный email"
}
Структура ошибок при этом не изменяется, изменяется только содержимое строк.
Формат errors позволяет:
Основной принцип — прямое соответствие ключа поля и UI-элемента формы.