Правила валидации

На этой странице приведен список всех доступных правил валидации и их возможностей.

Обязательные и зависимые поля

Правила в этом разделе определяют, когда поле должно быть обязательно заполнено. Поле считается пустым, если его значение: null, пустая строка или пустой массив.

Если поле отсутствует в запросе — оно также считается пустым.

Типы данных

Правила в этом разделе проверяют тип данных и, в некоторых случаях, преобразуют значение к указанному типу.

Строки и форматы

Правила в этом разделе применяются к строковым значениям и проверяют их соответствие специальным форматам.

Числа и сравнения

Правила в этом разделе применяются к числовым значениям и сравнивают их с другими значениями.

Логические значения

Массивы

Правила в этом разделе применяются к массивам и проверяют их структуру.

Файлы

Правила в этом разделе проверяют корректность загруженных файлов и изображений, а также накладывают ограничения на их размер, тип и параметры. При успешной проверки файла, возвращается объект Imhotep\Http\UploadedFile.

Даты

В этом разделе собраны правила для работы с датой и временем. На выходе объект DateTimeInterface.

База данных

Правила в этом разделе проверяют существование значений в базе данных.

Универсальные правила

Правила в этом разделе универсальны и могут применяться к любым типам данных. Что именно сравнивается — зависит от типа данных:

Тип значения Что сравнивается
Число само число
Строка число символов (UTF-8)
Массив число элементов
Загруженный файл размер в байтах

Полный список правил

accepted

Значение должно означать согласие пользователя.

Подробнее...

Допустимые значения: true, 1, "1", yes, on или y.

$data = $request->validate([
    'terms' => 'accepted',
    'age_confirm' => 'accepted',
]);

$data = $request->validate([
    'privacy_policy' => 'required|accepted',
]);
PHP

accepted_if:field,value1,...

Согласие требуется, если другое поле имеет указанное значение.

Подробнее...
$data = $request->validate([
    'plan' => 'required|in:free,pro,enterprise',
    'terms_pro' => 'accepted_if:plan,pro,enterprise',
]);

$data = $request->validate([
    'has_company' => 'required|boolean',
    'company_terms' => 'accepted_if:has_company,true',
]);
PHP

array

Значение должно быть массивом.

Подробнее...
$data = $request->validate([
    'items' => 'required|array|min:5',
    'items.*.id' => 'required|int',
    'items.*.quantity' => 'required|int|min:1',
]);
PHP

bool

Значение должно быть логическим типом.

Подробнее...

Принимает: true, false, 1, 0, "1", "0", "true", "false", "yes", "no", "on", "off", "y", "n".

Все эти значения преобразуются в bool.

$data = $request->validate([
    'is_public' => 'bool',
]);
PHP

coords

Массив с координатами [широта, долгота]. Значения приводятся к float. Широта должна быть в диапазоне: -90…90, долгота: -180…180.

date

Значение должно быть датой.

Подробнее...
$data = $request->validate([
    'birthday' => 'required|date',
    'event_date' => 'nullable|date',
]);
PHP

after:дата_или_поле

Дата должна быть строго позже указанной даты или даты другого поля.

Подробнее...
$data = $request->validate([
    'created_at' => 'required|date|after:2000-01-01',  // позже 1 января 2000
]);

$data = $request->validate([
    'finished_at' => 'required|date|after:now',  // позже сегодняшнего дня
]);

$data = $request->validate([
    'starts_at' => 'required|date',
    'ends_at' => 'required|date|after:starts_at',
]);
PHP

before:дата_или_поле

Дата должна быть строго раньше указанной даты или даты другого поля.

Подробнее...
$data = $request->validate([
    'birthday' => 'required|date|before:-18 years',  // лица старше 18 лет
    'expires_at' => 'required|date|before:2030-01-01', // раньше 1 января 2030
]);

$data = $request->validate([
    'ends_at' => 'required|date',
    'starts_at' => 'required|date|before:ends_at',     // раньше даты окончания
]);
PHP

different:поле

Значение не должно строго совпадать со значением другого поля.

Подробнее...
$data = $request->validate([
    'old_password' => 'required|string',
    'new_password' => 'required|different:old_password|min:8',
]);
PHP

dimensions:param=value,...

Ограничения ширины, высоты и соотношения сторон изображения.

Подробнее...

Поддерживаемые параметры: min_width, max_width, min_height, max_height, width, height, ratio, min_ratio, max_ratio.

Параметр ratio задаётся как отношение ширины к высоте. Допустимы как дробный формат (например, 3/2), так и десятичный (1.5).

$data = $request->validate([
    'cover' => 'required|image|dimensions:ratio=16/9,min_width=1280',
]);

$data = $request->validate([
    'avatar' => 'required|image|dimensions:min_width=300,min_height=300',
]);

$data = $request->validate([
    'photo' => 'nullable|image|dimensions:width=800,height=600',
]);
PHP

email

Значение должно быть корректным адресом электронной почты. Перед проверкой значение приводится к нижнему регистру.

Подробнее...
$data = $request->validate([
    'email' => 'required|email:filter',           // системная проверка PHP (FILTER_VALIDATE_EMAIL)
    'support' => 'required|email:filter_unicode', // системная проверка с Unicode
    'contact' => 'required|email:dns',            // проверяет существование DNS-записей домена
    'info' => 'required|email:idn',               // поддерживает интернациональные доменные имена (IDN)
    'admin' => 'required|email:idn,dns',          // комбинация модификаторов
]);
PHP

exists

Значение должно существовать в указанной таблице базы данных.

Подробнее...
$data = $request->validate([
    'user_id' => 'required|int|exists:users,id',
]);

Можно указать connection перед таблицей
$data = $request->validate([
    'order_id' => 'required|exists:analytics.orders,id',
]);
PHP

Примечание: Если колонка не указан, используется имя правила. Поэтому на практике лучше всегда передавать колонку таблицы явно.

file

Поле должно содержать корректно загруженный файл без ошибок загрузки.

Подробнее...
$data = $request->validate([
    'document' => 'required|file|max:10MB',
]);
PHP

fio

Строка из трёх частей (фамилия, имя, отчество), разделённых пробелом.

float

Значение должно быть числом с плавающей точкой. Числовая строка преобразуется в float.

Подробнее...
$data = $request->validate([
    'price' => 'required|float|min:0.01',
]);

$data = $request->validate([
    'latitude' => 'required|float|min:-90|max:90',
    'longitude' => 'required|float|min:-180|max:180',
]);
PHP

gt:field_or_value

Размер значения должен быть больше указанного числа или значения другого поля.

Подробнее...
$data = $request->validate([
    'age' => 'required|int|gt:18', // age должен быть > 18
    'price' => 'required|int|gt:0', // price должен быть > 0
]);

// Сравнение с другим полем
$data = $request->validate([
    'start_year' => 'required|int|min:2000', 
    'end_year' => 'required|int|gt:start_year', // end_year > start_year
    'weight_short' => 'required|string|min:8',
    'weight_full' => 'required|string|gt:weight_short', // weight_full > weight_short
]);
PHP

gte:field_or_value

Размер значения должен быть больше или равен указанному числу или значению другого поля.

Подробнее...
$data = $request->validate([
    'age' => 'required|int|gte:18',          // age должен быть >= 18
    'quantity' => 'required|int|gte:1',      // quantity должен быть >= 1
]);

$data = $request->validate([
    'start_year' => 'required|int|min:2000', 
    'end_year' => 'required|int|gte:start_year', // end_year >= start_year
    'weight_short' => 'required|string|min:8',
    'weight_full' => 'required|string|gt:weight_short', // weight_full >= weight_short
]);
PHP

image[:ext1,...]

Файл должен быть изображением. Без параметров принимает все распространённые форматы: gif, jpeg, jpg, png, bmp, tiff, ico, webp, avif.

С параметром ограничивает допустимые расширения которые перечислены в нем.

Подробнее...
// Любое изображение
$data = $request->validate([
    'avatar' => 'required|image|max:2MB',
]);

// Только JPG, PNG или WEBP
$data = $request->validate([
    'avatar' => 'required|image:jpg,png,webp|max:2MB',
]);
PHP

in:value1,value2...

Значение должно входить в перечисленный список допустимых значений.

Подробнее...
$data = $request->validate([
    'status' => 'required|in:draft,published,archived',
]);
PHP

int

Значение должно быть целым числом. Числовая строка преобразуется в int.

Подробнее...
$data = $request->validate([
    'age' => 'int|min:1|max:100',
]);
PHP

json

Значение должно быть строкой с корректным JSON.

Подробнее...
$data = $request->validate([
    'metadata' => 'required|json',
]);
PHP

lowercase

Строка должна быть в нижнем регистре.

uppercase

Строка должна быть в верхнем регистре.

min:value

Размер значения не меньше указанного.

Подробнее...
$data = $request->validate([
    'title' => 'required|string|min:3',
    'items' => 'required|array|min:1',
    'age' => 'required|int|min:18',
]);
PHP

max:value

Размер значения не больше указанного.

Подробнее...
$data = $request->validate([
    'title' => 'required|string|max:150',
    'items' => 'required|array|max:20',
    'avatar' => 'nullable|file|max:2MB',
]);
PHP

mimes:ext1,...

Исходное расширение файла должно входить в перечисленный список.

Подробнее...
$data = $request->validate([
    'document' => 'required|file|mimes:pdf,docx|max:10MB',
]);
PHP

Внимание: Правило mimes основано на расширении исходного имени файла. Для безопасности содержимого всегда сочетайте его с file и храните загрузки вне публичного каталога.

nullable

Разрешает передавать null в поле. При получении значения null остальные правила валидации для этого поля пропускаются. Полезно, когда поле необязательно, но если оно передано — должно проходить валидацию.

Подробнее...
$data = $request->validate([
    'middle_name' => 'nullable|string|max:100',
    'avatar' => 'nullable|image|max:2048',
    'bio' => 'nullable|string|max:500',
]);
PHP

numeric

Значение должно содержать только цифры (целое число). Это проверка формата, преобразования типа не происходит.

Подробнее...
$data = $request->validate([
    'pin_code' => 'required|numeric|digits:4',
]);
PHP

phone

Российский номер телефона. Очищает от посторонних символов. Возвращает номер телефона в формате: 7900000000.

required

Проверяемое поле должно присутствовать во входных данные и не должно быть пустым.

Подробнее...
$data = $request->validate([
    'name' => 'required|string',
]);
PHP

required_if:field,value1,...

Обязательно, если другое поле равно одному из перечисленных значений.

Подробнее...
$data = $request->validate([
    'type' => 'required|in:person,company',
    'company_name' => 'required_if:type,company|string|max:150',
]);
PHP

Если нужно указать несколько значений, перечислите их через запятую:

$data = $request->validate([
    'delivery' => 'required|in:courier,digital,self',
    'address' => 'required_if:delivery,courier,self|string',
]);
PHP

required_unless:field,value1,...

Обязательно, если другое поле не равно ни одному из перечисленных значений.

Подробнее...
// inn обязателен, если country != RU
$data = $request->validate([
    'country' => 'required|string',
    'inn' => 'required_unless:country,RU|string',
]);

// card_number обязателен, если payment_method = card
$data = $request->validate([
    'payment_method' => 'required|in:card,cash,transfer',
    'card_number' => 'required_unless:payment_method,cash,transfer|numeric',
]);
PHP

required_without:field1,...

Обязательно, если хотя бы одно из перечисленных полей пусто или отсутствует.

Подробнее...
// email обязателен, если не указан phone (и наоборот)
$data = $request->validate([
    'email' => 'required_without:phone|email',
    'phone' => 'required_without:email|phone',
]);

// contact обязателен, если email и phone не указаны
$data = $request->validate([
    'contact' => 'required_without:email,phone|string',
]);
PHP

same:field

Значение должно строго совпадать со значением другого поля.

Подробнее...
$data = $request->validate([
    'password' => 'required|string|min:8',
    'password_confirmation' => 'required|same:password',
]);
PHP

size:value,...

Размер значения должен быть равен одному из перечисленных значений.

Подробнее...
$data = $request->validate([
    'block_size' => 'required|int|size:16,32,64',
    'thumbnail' => 'nullable|file|size:100KB,200KB',
]);
PHP

string

Значение должно быть строкой. Числовое значение преобразуется в строку.

Подробнее...
$data = $request->validate([
    'name' => 'required|string|max:255',
]);
PHP

url

Значение должно быть корректным URL.

Подробнее...
$data = $request->validate([
    'address' => 'nullable|url',                 // любой URL
    'website' => 'nullable|url:https',           // только HTTPS
    'api' => 'required|url:http,https',          // HTTP или HTTPS
    'websocket' => 'required|url:ws,wss',        // WebSocket
    'ftp' => 'nullable|url:ftp,ftps',            // FTP
]);
PHP