html 输入字段的电子邮件格式与 laravel 电子邮件验证不一致
inconsistent email format of html input field with laravel email validation
在我的 blade 文件中,我有一个 html 用户表单,其中输入字段电子邮件的类型为电子邮件。但我认为它提供了不一致的电子邮件格式验证。例如,它显示 abc@xyz 和 abc@xyz.com 都是正确的电子邮件地址,但在我的控制器中,验证器方法 return 我的 abc@xyz 电子邮件格式无效。我该如何解决这个问题???
在我的 blade 文件中:
<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);
}
实际上 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
执行更严格的规则,即电子邮件地址应包含顶级域。
在我的 blade 文件中,我有一个 html 用户表单,其中输入字段电子邮件的类型为电子邮件。但我认为它提供了不一致的电子邮件格式验证。例如,它显示 abc@xyz 和 abc@xyz.com 都是正确的电子邮件地址,但在我的控制器中,验证器方法 return 我的 abc@xyz 电子邮件格式无效。我该如何解决这个问题???
在我的 blade 文件中:
<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);
}
实际上 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
执行更严格的规则,即电子邮件地址应包含顶级域。