如何将所有与正则表达式匹配的字段与laravel一起使用?

时间:2016-02-02 21:19:05

标签: php regex validation laravel laravel-5

我正在制作一个用户可以上传问题的应用程序,而问题可以有多个正确答案。正确答案的名称为correctAnswer1 correctAnswer2等。

我想知道如何要求所有提交的字段与此模式匹配;我在考虑使用与

类似的东西

/correctAnswer[0-9]/ => 'required'

1 个答案:

答案 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}部分。