我正在通过FormRequest使用Laravel的验证。代码摘录在这里。似乎 laravel 的验证是让像"user@hotmail"这样的电子邮件地址通过。
namespace AppHttpRequests;
use IlluminateFoundationHttpFormRequest;
class DirectorForm extends FormRequest
{
public function rules()
{
return [
'email' => 'required|email',
];
}
}
似乎上述验证允许"username@hotmail",这不是有效的电子邮件地址。
我设置错了吗
实际上user@hotmail
是有效的电子邮件,因为user@localhost
也可以是有效的电子邮件地址。
如果您想检查电子邮件地址是否也包含 TLD,您可以尝试:
namespace AppHttpRequests;
use IlluminateFoundationHttpFormRequest;
class DirectorForm extends FormRequest
{
public function rules()
{
return [
'email' => 'required|regex:.+@.+..+',
];
}
}
有关更多正则表达式电子邮件验证规则,请查看此答案。
使用正则表达式: https://emailregex.com/
并与Laravel正则表达式规则相结合:https://laravel.com/docs/5.8/validation#rule-regex
似乎验证正在按预期工作。感谢您的阅读!
为AppServiceProvider
电子邮件编写自定义验证,例如
引导方式
Validator::extend('email_address', function ($attribute, $value, $parameters, $validator) {
return (!preg_match("/^([a-z0-9+_-]+)(.[a-z0-9+_-]+)*@([a-z0-9-]+.)+[a-z]{2,6}$/ix", $value)) ? FALSE : TRUE;
});
Rules
public function rules()
{
return [
'email' => 'required|email_address',
];
}