【问题标题】:How can I require all fields matching a regular expression with laravel?我如何要求所有与 laravel 正则表达式匹配的字段?
【发布时间】:2016-02-02 21:19:04
【问题描述】:

我正在制作一个应用程序,用户可以在其中上传问题,并且问题可以有多个正确答案。正确答案的名称格式为正确答案 1 正确答案 2 等。

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

的东西

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

【问题讨论】:

  • 你的意思是检查多个选项like this
  • 有正则表达式验证规则:laravel.com/docs/5.1/validation#rule-regex
  • @JoelHinz 规则不是我需要的;将给定字段与正则表达式匹配。我想要求所有匹配正则表达式的字段。
  • @noob 我想要求该表单的所有字段(已从表单提交的元素)。
  • @user3856986:那么正确的输入格式应该是什么?举一些正确和错误输入的例子。

标签: php regex validation laravel laravel-5


【解决方案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:这将仅匹配 correctAnswer1correctAnswer9。如果您想要更多,只需使用正则表达式的 [0-9]{1} 部分即可。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-23
    • 1970-01-01
    • 2019-07-27
    • 2017-06-25
    • 2013-01-09
    • 2020-08-09
    • 2010-09-09
    相关资源
    最近更新 更多