Перейти к основному содержимому

Обзор валидации

ReFormer предоставляет декларативную валидацию со встроенными валидаторами и поддержкой кастомной валидации.

Базовое использование

Определите валидацию в validation:

import { GroupNode } from '@reformer/core';
import { required, email, minLength } from '@reformer/core/validators';

const form = new GroupNode({
form: {
name: { value: '' },
email: { value: '' },
},
validation: (path) => {
validate(path.name, required());
validate(path.name, minLength(2));
validate(path.email, required());
validate(path.email, email());
},
});

Состояние валидации

// Проверка состояния валидации
form.valid; // true если все поля валидны
form.invalid; // true если есть невалидные поля

// Проверка конкретного поля
form.controls.name.valid;
form.controls.name.errors; // { required: true } или null

Сообщения об ошибках

Доступ к ошибкам отдельных полей:

const name = form.controls.name;

name.errors;
// null - когда валидно
// { required: true } - когда required не прошёл
// { minLength: { required: 2, actual: 1 } } - когда minLength не прошёл

Встроенные валидаторы

ВалидаторОписаниеКлюч ошибки
validate(path.field, required())Поле должно иметь значениеrequired
validate(path.field, email())Корректный формат emailemail
validate(path.field, minLength(n))Минимальная длина строкиminLength
validate(path.field, maxLength(n))Максимальная длина строкиmaxLength
validate(path.field, min(n))Минимальное числовое значениеmin
validate(path.field, max(n))Максимальное числовое значениеmax
validate(path.field, pattern(regex))Соответствие регулярному выражениюpattern
validate(path.field, url())Корректный формат URLurl
validate(path.field, phone())Корректный формат телефонаphone
validate(path.field, isNumber())Значение — числоisNumber
validate(path.field, integer())Целое числоinteger
validate(path.field, multipleOf(n))Кратно nmultipleOf
validate(path.field, nonNegative())≥ 0nonNegative
validate(path.field, nonZero())≠ 0nonZero
validate(path.field, isDate())Корректная датаdate_invalid

Условная валидация

Применять валидацию только при выполнении условия:

import { applyWhen, validate, required } from '@reformer/core/validators';

validation: (path) => {
applyWhen(
path.contactByPhone,
(value) => value === true,
(path) => {
validate(path.phone, required());
}
);
};

Время валидации

Валидация запускается автоматически когда:

  • Изменяется значение
  • Поле помечается как touched (для отображения)
// Ручная валидация
form.validate(); // Валидировать всю форму

Следующие шаги