如何在 laravel 验证中验证多个电子邮件?
How to validate multiple email in laravel validation?
我已经完成了 laravel 中变量验证的所有操作,但是对于电子邮件,我遇到了一个简单的问题。
来自 Laravel、
的文档
'email' => 'required|email'
我知道这只适用于一个电子邮件地址,但对于
email=abc@xyz.com,xyz@abc.com, def@ghi,com
当我发送电子邮件数组时,我仍然收到电子邮件不是有效电子邮件。
我做了更多,
'email' => 'required|email|array'
但是我还是报错了。任何人都可以帮忙吗
谢谢,
您需要编写自定义验证程序,它将获取数组并手动验证数组中的每个电子邮件。在 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'
];
}
Laravel 5.2 引入了数组验证,您可以轻松验证电子邮件数组:)
您只需将字符串分解为数组即可。
在 5.6 或更高版本中,您可以按如下方式定义验证器规则:
'email.*' => 'required|email'
这需要 email
键是有效电子邮件地址的数组。
我是这样做的。工作对我有好处。
如果电子邮件或电子邮件 (email1@gmail.com、email2@yahoo.com、email3@gmail.com) 来自像这样的表单,那么自定义验证器将起作用。这需要添加到 - AppServiceProvider.php - 文件。新规则是 - 'emails'.
/**
* 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',
]);
我们可以在没有自定义验证的情况下实现这一点,我们可以覆盖一个方法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'
];
}
我已经完成了 laravel 中变量验证的所有操作,但是对于电子邮件,我遇到了一个简单的问题。
来自 Laravel、
的文档'email' => 'required|email'
我知道这只适用于一个电子邮件地址,但对于
email=abc@xyz.com,xyz@abc.com, def@ghi,com
当我发送电子邮件数组时,我仍然收到电子邮件不是有效电子邮件。 我做了更多,
'email' => 'required|email|array'
但是我还是报错了。任何人都可以帮忙吗
谢谢,
您需要编写自定义验证程序,它将获取数组并手动验证数组中的每个电子邮件。在 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'
];
}
Laravel 5.2 引入了数组验证,您可以轻松验证电子邮件数组:)
您只需将字符串分解为数组即可。
在 5.6 或更高版本中,您可以按如下方式定义验证器规则:
'email.*' => 'required|email'
这需要 email
键是有效电子邮件地址的数组。
我是这样做的。工作对我有好处。 如果电子邮件或电子邮件 (email1@gmail.com、email2@yahoo.com、email3@gmail.com) 来自像这样的表单,那么自定义验证器将起作用。这需要添加到 - AppServiceProvider.php - 文件。新规则是 - 'emails'.
/**
* 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',
]);
我们可以在没有自定义验证的情况下实现这一点,我们可以覆盖一个方法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'
];
}