如何在laravel验证中验证多个电子邮件?

Sub*_*d30 9 php email validation laravel laravel-validation

我已经为laravel中的变量验证了所有的东西但是对于电子邮件我有一个简单的问题.

来自Laravel的文档,

'email' => 'required|email'
Run Code Online (Sandbox Code Playgroud)

我知道这只是一个电子邮件地址但是对于喜欢,

email=abc@xyz.com,xyz@abc.com, def@ghi,com
Run Code Online (Sandbox Code Playgroud)

当我发送电子邮件的数组时,我仍然收到电子邮件不是有效的电子邮件.我做得更像,

'email' => 'required|email|array'
Run Code Online (Sandbox Code Playgroud)

但我仍然有错误.可以任何身体帮助.

谢谢,

Mar*_*ala 18

您需要编写自定义Validator,它将获取阵列并手动验证阵列中的每个电子邮件.在Laravel 5请求你可以做类似的事情

public function __construct() {
    Validator::extend("emails", function($attribute, $value, $parameters) {
        $rules = [
            'email' => 'required|email',
        ];
        foreach ($value as $email) {
            $data = [
                'email' => $email
            ];
            $validator = Validator::make($data, $rules);
            if ($validator->fails()) {
                return false;
            }
        }
        return true;
    });
}

public function rules() {
    return [
        'email' => 'required|emails'
    ];
}
Run Code Online (Sandbox Code Playgroud)

  • 要扩展此答案,请记住在validation.php语言文件中添加自定义验证消息. (2认同)

Jul*_*ian 10

在 5.6 或更高版本中,您可以按如下方式定义验证器规则:

'email.*' => 'required|email'

这将期望email密钥是一组有效的电子邮件地址。


Elb*_*lby 8

我们可以在没有自定义验证的情况下实现这一点,我们可以覆盖一个方法 prepareForValidation

protected function prepareForValidation() 
{
   //Here email we are reciving as comma seperated so we make it array
   $this->merge(['email' => explode(',', rtrim($this->email, ','))]);
}
Run Code Online (Sandbox Code Playgroud)

然后上面的函数会自动调用并将 email-ids 转换为数组,然后使用数组验证规则

public function rules()
 {
     return [
        'email.*' => 'required|email'
     ];
 }
Run Code Online (Sandbox Code Playgroud)