我正在制作一个用户可以上传问题的应用程序,而问题可以有多个正确答案。正确答案的名称为correctAnswer1 correctAnswer2等。
我想知道如何要求所有提交的字段与此模式匹配;我在考虑使用与
类似的东西 /correctAnswer[0-9]/ => 'required'
答案 0 :(得分:1)
我不确定你的要求背后的逻辑,有点似乎你应该以不同的方式做事,但我又不知道你的应用是如何工作的,所以我无法判断。因此,如果用户可以在表单上添加新的正确答案字段,并且您不希望它们为空,那么它就是有意义的。
您不能在规则名称中使用正则表达式,但可以执行以下操作:
$rules = [
// your other rules
];
$correctAnswers = preg_grep( '/^correctAnswer[1-9]{1}$/', array_keys($this->all()));
// use $this->all() when in Http\Requests\YourRequest
// if you are not using the request method of validation (you validate in controller)
// simply replace $this->all() with $request->all() or Input::all().
foreach ($correctAnswers as $correctAnswer) {
$rules[$correctAnswer] = 'required';
}
return $rules;
这假设您正在使用Laravel 5 Http\Requests
来验证您的输入。如果您正在其他地方进行验证(例如在控制器中),只需将$this->all()
替换为$request->all()
或Input::all()
。我不能给出确切的选择,因为我不确切知道你如何进行验证以及你使用的是什么版本的laravel。
PS:这只会与correctAnswer1
匹配到correctAnswer9
。如果您想要更多地使用正则表达式的[0-9]{1}
部分。