🛠️ Встроенные правила валидации
Базовые правила
typescript
r.required('Кастомное сообщение') // Обязательное поле
r.email() // Валидный email
r.minLength(5) // Минимальная длина
r.maxLength(100) // Максимальная длина
r.numeric() // Только цифры
r.regex(/pattern/, 'сообщение') // Кастомный regex
r.oneOf(['a', 'b', 'c']) // Должно быть одним из значенийЧисловые правила
typescript
r.minValue(0) // Минимальное значение
r.maxValue(100) // Максимальное значение
r.between(0, 100) // Диапазон значенийКросс-полевые правила
typescript
r.sameAs('password') // Должно совпадать с другим полем
r.dateAfter('startDate') // Дата должна быть после другого поля
r.requiredIf('type', 'business') // Обязательно при условииПравила файлов
typescript
r.fileRequired() // Выбор файла обязателен
r.fileSize(5 * 1024 * 1024) // Максимальный размер файла (5MB)
r.fileType(['.jpg', '.png']) // Разрешенные типы файлов
r.fileCount(1, 5) // Диапазон количества файловПравила массивов
typescript
r.arrayRequired() // Проверяет, что значение — массив и в нём есть хотя бы один элемент
r.arrayMinLength(1) // Минимальная длина массива
r.arrayMaxLength(10) // Максимальная длина массиваПримечание: arrayRequired() и arrayMinLength(1) работают одинаково, но arrayRequired() предоставляет более семантичное название для обязательных массивов.
Продвинутые правила
typescript
// Удаленная валидация с debouncing
r.remote(
async username => {
const response = await fetch(`/api/check-username/${username}`)
return response.ok
},
'Имя пользователя уже занято',
500
)
// Кастомная валидация
r.custom((value, allValues) => {
return value.includes(allValues.domain)
}, 'Неверный формат')