我已经为laravel中的变量验证了所有内容,但对于电子邮件,我遇到了一个简单的问题。
来自Laravel的文档,
'email' => 'required|email'
我知道这只是一个电子邮件地址,但是喜欢,
email=abc@xyz.com,xyz@abc.com, def@ghi,com
当我发送电子邮件的数组时,我仍然收到电子邮件不是有效的电子邮件。 我做得更像,
'email' => 'required|email|array'
但我仍然有错误。可以任何身体帮助。
谢谢,
答案 0 :(得分:17)
您需要编写自定义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'
];
}
答案 1 :(得分:2)
在5.6或更高版本中,您可以按以下方式定义验证器规则:
'email.*' => 'required|email'
这将期望email
键是有效电子邮件地址的数组。
答案 2 :(得分:2)
我们可以在没有自定义验证的情况下实现此目标,我们可以覆盖方法prepareForValidation
protected function prepareForValidation()
{
//Here email we are reciving as comma seperated so we make it array
$this->merge(['email' => explode(',', rtrim($this->email, ','))]);
}
然后上述函数将使用数组验证规则自动调用并将电子邮件ID转换为数组
public function rules()
{
return [
'email.*' => 'required|email'
];
}
答案 3 :(得分:1)
Laravel 5.2引入了数组验证,您可以轻松验证电子邮件数组:)
您需要的只是将字符串扩展为数组。
答案 4 :(得分:1)
我是这样做的。对我有好处。 如果电子邮件或电子邮件(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',
]);