Валидация данных в Yup строится вокруг декларативного описания схем, которые определяют структуру и правила проверки значений. Каждая схема представляет собой объект, описывающий тип данных и набор ограничений, применяемых к этому типу.
Основой работы является создание экземпляров схем через фабричные методы, соответствующие типу данных.
import * as Yup from 'yup';
После подключения библиотеки становится доступен набор методов для построения схем различной сложности.
Наиболее базовый вариант схемы связан со строковыми значениями. Такая схема задаёт тип и минимальные требования к значению.
const nameSchema = Yup.string();
Подобная схема допускает любое строковое значение, включая пустую строку. Для введения ограничений используются дополнительные методы.
const nameSchema = Yup.string()
.required()
.min(2)
.max(30);
Комбинация правил формирует цепочку валидации:
required() — обязательное наличие значенияmin(n) — минимальная длина строкиmax(n) — максимальная длина строкиКаждый метод возвращает новую схему, расширяя предыдущую.
Для числовых данных применяется Yup.number(),
позволяющий задавать диапазоны и дополнительные условия.
const ageSchema = Yup.number()
.required()
.min(0)
.max(120);
Основные ограничения:
min(n) — минимальное допустимое значениеmax(n) — максимальное допустимое значениеrequired() — обязательность поляДополнительно возможно уточнение поведения при некорректных типах данных, однако в простейшей схеме это не требуется.
Объектные схемы позволяют описывать структуру сложных данных,
состоящих из нескольких полей. Для этого используется
Yup.object() совместно с методом shape.
const userSchema = Yup.object().shape({
name: Yup.string().required().min(2),
age: Yup.number().required().min(18)
});
Каждое поле объекта описывается отдельной схемой, что обеспечивает модульность и читаемость.
Структура shape:
Простейшая схема часто представляет собой набор нескольких независимых правил, объединённых в объект.
const schema = Yup.object().shape({
username: Yup.string().required().min(3),
email: Yup.string().required().email(),
password: Yup.string().required().min(8)
});
В данном случае используются базовые типы и встроенные проверки
формата, например email().
Схема используется для синхронной или асинхронной проверки значений.
Наиболее простой способ — вызов validateSync.
const data = {
username: 'alex',
email: 'alex@mail.com',
password: '12345678'
};
const validated = schema.validateSync(data);
При несоответствии данным схемы генерируется исключение, содержащее информацию о нарушенных правилах.
Асинхронный вариант:
schema.validate(data)
.then(valid => {
// валидные данные
})
.catch(err => {
// ошибки валидации
});
Схемы Yup строятся из комбинации примитивных типов и цепочек ограничений. Основные элементы:
Каждый элемент схемы остаётся независимым, что позволяет переиспользовать отдельные части в разных контекстах.
Минимальная форма данных обычно включает несколько полей с базовыми проверками:
const formSchema = Yup.object().shape({
firstName: Yup.string().required().min(2),
lastName: Yup.string().required().min(2),
age: Yup.number().required().min(18),
email: Yup.string().required().email()
});
Каждое поле описывается отдельной схемой, но объединяется в единый объект, формируя целостное описание структуры данных.