required_if 在 Laravel 中验证
required_if validation in Laravel
我正在尝试添加一个规则来验证字段。仅当正文字段包含 HTML 时才需要填写 'snippet' 字段。我的控制器存储方法中有以下内容,但我不太清楚 required_if 如何与正则表达式结合使用以检查字段是否包含 HTML:
$newsitem->update(request()->validate([
'snippet' => 'nullable|max:255|not_regex:/[<>]/',
'body' => 'required',
]));
从 Laravel 文档来看,它看起来像:'required_if:anotherfield,value' 验证规则 returns 是一个基于值的布尔值,但我需要 return 一个基于值的布尔值在 body 字段的正则表达式检查中。
我知道我可以检查正文是否等于一:
'snippet' => 'required_if:body,==,1|nullable|max:255|not_regex:/[<>]/'
...但我需要一些东西来检查正文是否包含 < 或 >。
(我可以在我的表单提交中添加一个隐藏字段,如果正文包含 html 使用 javascript,它将获得一个值集,但我希望能够通过后端验证来处理这个问题。)
我是否需要使用自定义验证规则,或者这可以单独使用默认 Laravel 验证规则来处理吗?
我在 Laravel 文档中看到您可以使用: Rule::requiredIf
方法来构建更复杂的条件。这是我可以与 contains_hmtl 函数一起使用的东西吗?
'snippet' => Rule::requiredIf($request->snippet()->contains_html),
我真的觉得我在这里遗漏了一些东西,所以任何指点将不胜感激。
RequiredIf 规则接受一个应该 return 布尔值的闭包。
Rule::requiredIf(function () use ($request) {
//Perform the check on $request->snippet to determine whether it is a valid HTML here
//Return true if it is valid HTML else return false
}),
使用 RequiredIf
尝试以下正则表达式:
[
...,
'snippet' => ['nullable', 'max:255', new RequiredIf(function () {
return preg_match('/<[^<]+>/m', request()->input('body')) !== 0;
})],
...,
]
我正在尝试添加一个规则来验证字段。仅当正文字段包含 HTML 时才需要填写 'snippet' 字段。我的控制器存储方法中有以下内容,但我不太清楚 required_if 如何与正则表达式结合使用以检查字段是否包含 HTML:
$newsitem->update(request()->validate([
'snippet' => 'nullable|max:255|not_regex:/[<>]/',
'body' => 'required',
]));
从 Laravel 文档来看,它看起来像:'required_if:anotherfield,value' 验证规则 returns 是一个基于值的布尔值,但我需要 return 一个基于值的布尔值在 body 字段的正则表达式检查中。
我知道我可以检查正文是否等于一:
'snippet' => 'required_if:body,==,1|nullable|max:255|not_regex:/[<>]/'
...但我需要一些东西来检查正文是否包含 < 或 >。 (我可以在我的表单提交中添加一个隐藏字段,如果正文包含 html 使用 javascript,它将获得一个值集,但我希望能够通过后端验证来处理这个问题。)
我是否需要使用自定义验证规则,或者这可以单独使用默认 Laravel 验证规则来处理吗?
我在 Laravel 文档中看到您可以使用: Rule::requiredIf
方法来构建更复杂的条件。这是我可以与 contains_hmtl 函数一起使用的东西吗?
'snippet' => Rule::requiredIf($request->snippet()->contains_html),
我真的觉得我在这里遗漏了一些东西,所以任何指点将不胜感激。
RequiredIf 规则接受一个应该 return 布尔值的闭包。
Rule::requiredIf(function () use ($request) {
//Perform the check on $request->snippet to determine whether it is a valid HTML here
//Return true if it is valid HTML else return false
}),
使用 RequiredIf
尝试以下正则表达式:
[
...,
'snippet' => ['nullable', 'max:255', new RequiredIf(function () {
return preg_match('/<[^<]+>/m', request()->input('body')) !== 0;
})],
...,
]