如何在验证laravel中使用AND、OR



我正在使用Laravel,我有类似的有效期

'color_amount' => 'sometimes',
'color_amount_number.*' => 'required_with:color_amount,on',
'specification_amount' => 'sometimes',
'specification_amount_number.*' => 'required_with:specification_amount,on',
'description' => 'required|min:10|max:4000',
'amount' => ['required_unless:specification_amount,on,required_unless:color_amount,on','nullable',
'regex:/^[ا-یa-zA-Z0-9-۰-۹ء-ي., ]+$/u','max:999999','min:0'
],

对于"金额",我想使用OR,例如

required_except:specification_amount,on OR required_exception:color_amount,on

我该怎么做?

一个更容易阅读的选项是使用回调:

$rules = [
'color_amount' => 'sometimes',
'color_amount_number.*' => 'required_with:color_amount,on',
'specification_amount' => 'sometimes',
'specification_amount_number.*' => 'required_with:specification_amount,on',
'description' => 'required|min:10|max:4000',
'amount' => [
function ($attribute, $value, $fail) use ($request) {
if (!$value && ($request->specification_amount == 'on' || $request->color_amount == 'on'))
$fail($attribute . ' is required.');
},
'required_unless:specification_amount,on,required_unless:color_amount,on',
'nullable',
'regex:/^[ا-یa-zA-Z0-9-۰-۹ء-ي., ]+$/u',
'max:999999',
'min:0'
]
];

使用if和elseif以及else例如

$input = Input::only('account'); // dont use all(), ever
$rules = [
'account' => 'required'
];
if (filter_var($input['account'], FILTER_VALIDATE_EMAIL))
{
$rules['account'] .= '|exists:users,email';
}
else
{
$rules['account'] .= '|exists:users,username';
}
$validator = Validator::make($input, $rules);

最新更新