【问题标题】:Validate multiple emails in a single text field using Laravel?使用 Laravel 在单个文本字段中验证多封电子邮件?
【发布时间】:2019-01-23 18:45:36
【问题描述】:

如何使用 Laravel 验证文本字段中的多个是否正确?

示例 1:

这 3 封电子邮件都很好,因此它返回 true

示例 2:

前2封邮件没问题,3封不正确return false

目前,只有验证单个电子邮件的代码

public function rules()
{
   return [
      'emails' => 'required|email'
   ];
}

谢谢。

PS:电子邮件的数量可能会有所不同(1到N)

【问题讨论】:

  • 编写一个自定义的可爆炸和检查的验证器当然是一种选择。我认为在框架中使用现有规则是不可能的,也许其他人可以。
  • 查看laravel.com/docs/5.6/validation的“验证后挂钩”部分
  • 我不敢相信不支持匿名函数回调,或者至少如果支持,那么它们的文档隐藏得很好。

标签: php laravel validation


【解决方案1】:

在这种情况下,您可以使用正则表达式验证:

public function rules()
{
   return [
      'emails' => ['required','regex:/^(\s?[^\s,]+@[^\s,]+\.[^\s,]+\s?)*(\s?[^\s,]+@[^\s,]+\.[^\s,]+)$/g']
   ];
}

【讨论】:

    【解决方案2】:

    扩展一个名为“emails”的新验证器,它可以扩展您的价值并分别验证每封电子邮件。

    可以在这里找到一个很好的解决方案:https://stackoverflow.com/a/29455516/405217

    【讨论】:

      【解决方案3】:

      您如何发布请求?

      如果您使用 javascript/ajax,您可以在发送前拆分电子邮件字段并将其放入三个不同的字段,如电子邮件 []。

      然后在你的控制器中你可以做类似的事情

          $validator = Validator::make($request->all(), [
              'email.*' => 'required|email',
          ],[
              'email.*.email' => 'In case you are wondering how to set error messages for this kind of validation'
          ]);
      

      如果您不使用 Javascript,您可以考虑使用多个字段或按照@TobiasK 的建议编写一些自定义验证

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-31
      • 2014-05-28
      • 2020-11-25
      • 1970-01-01
      • 2022-01-07
      • 2015-06-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多