在我的刀片文件中,我有一个用户的html表单,其中输入字段电子邮件具有类型电子邮件。但我认为它提供了不一致的电子邮件格式验证。例如,它显示abc @ xyz和abc@xyz.com都是正确的电子邮件地址但在我的控制器中,验证方法返回abc @ xyz的无效电子邮件格式。我该如何解决这个问题?
在我的刀片文件中:
<input type="email" name="email" value="">
在我的控制器中:
$validator = Validator::make($request->all(), [
'email' => 'email|unique:table_name,col_name',
],[
'email.unique' => 'email is already in used',
]);
if ($validator->fails()) {
return redirect()->back()->withInput($request->all())->withErrors($validator);
}
答案 0 :(得分:0)
实际上Laravel使用PHP
内置函数filter_var
(source code)。
// Illuminate\Validation\Concerns\ValidateAttributes
/**
* Validate that an attribute is a valid e-mail address.
*
* @param string $attribute
* @param mixed $value
* @return bool
*/
public function validateEmail($attribute, $value)
{
return filter_var($value, FILTER_VALIDATE_EMAIL) !== false;
}
PHP
实施的规则与浏览器实施的规则完全不同。 abc@xyz
已通过浏览器验证规则,因为xyz
是有效hostname
(您可以将其读为here)。但PHP
实施了更严格的规则,即电子邮件地址应包含顶级域名。