10

我已经为 laravel 中的变量验证做了所有事情,但是对于电子邮件,我遇到了一个简单的问题。

来自 Laravel 的文档,

'email' => 'required|email'

我知道这仅适用于一个电子邮件地址,但对于类似,

email=abc@xyz.com,xyz@abc.com, def@ghi,com

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

'email' => 'required|email|array'

但我仍然有错误。任何身体都可以提供帮助。

谢谢,

4

5 回答 5

21

您需要编写自定义验证器,它将获取数组并手动验证数组中的每个电子邮件。在 Laravel 5 Request 你可以做这样的事情

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'
    ];
}
于 2015-04-05T08:35:40.250 回答
10

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

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

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

于 2018-11-12T22:37:06.537 回答
10

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

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

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

public function rules()
 {
     return [
        'email.*' => 'required|email'
     ];
 }
于 2019-11-19T06:46:51.037 回答
2

Laravel 5.2 引入了数组验证,您可以轻松验证电子邮件数组 :)

您所需要的只是将字符串分解为数组。

https://laravel.com/docs/5.2/validation#validating-arrays

于 2016-02-28T09:44:48.240 回答
2

我是这样做的。工作对我有好处。如果电子邮件或电子邮件(email1@gmail.com、email2@yahoo.com、email3@gmail.com)来自如下自定义验证器工作的表单。这需要添加到 - AppServiceProvider.php - 文件中。新规则是 - “电子邮件”。

    /**
     * emails
     * Note: this validates multiple emails in coma separated string.
     */
    Validator::extend('emails', function ($attribute, $value, $parameters, $validator) {
        $emails = explode(",", $value);
        foreach ($emails as $k => $v) {
            if (isset($v) && $v !== "") {
                $temp_email = trim($v);
                if (!filter_var($temp_email, FILTER_VALIDATE_EMAIL)) {
                    return false;
                }
            }
        }
        return true;
    }, 'Error message - email is not in right format');

在你的控制器中,它可以这样使用:

    $this->validate($request, [
        'email_txt_area' => 'emails',
    ]);
于 2018-11-29T16:31:41.837 回答