Laravel电子邮件验证问题

Laravel电子邮件验证问题,laravel,validation,laravel-5,Laravel,Validation,Laravel 5,默认的Laravel验证类允许奇怪的电子邮件。以下是我定义的验证规则: return Validation::make($data, [ 'email' => 'required|string|email|max:100|unique:customers,email' ]); 当我尝试使用一些奇怪的电子邮件时,例如: aaaa?%和'@şğüçi̇öcom它通过了验证。但是,电子邮件中的非拉丁字符在DB insert之前转换。因此,数据库中的电子邮件地址与原始地址不匹配

默认的Laravel验证类允许奇怪的电子邮件。以下是我定义的验证规则:

return Validation::make($data, [
        'email' => 'required|string|email|max:100|unique:customers,email'
]);
当我尝试使用一些奇怪的电子邮件时,例如: aaaa?%和'@şğüçi̇öcom它通过了验证。但是,电子邮件中的非拉丁字符在DB insert之前转换。因此,数据库中的电子邮件地址与原始地址不匹配

为了防止这种情况,我想禁止在@符号后使用非拉丁字符。我尝试了自定义规则,它是:

public function passes($attribute, $value)
{
    return filter_var($value, FILTER_VALIDATE_EMAIL) 
    && preg_match('/@.+\./', $value);
}
但它不起作用。在这方面能得到一些帮助是很好的

编辑1
谢谢你的回复!但显然,自定义验证器不采取行动的原因是,Laravel在任何操作之前都会清理所有输入数据。这就是为什么在转换非拉丁字符后,preg_replace始终返回1,因为输入上没有非拉丁字符。首先,我需要找到一个解决方案,防止Laravel对输入进行消毒

根据您的问题,我知道您已经创建了一个自定义验证规则,并像以前一样使用它

...
'email' => [
    'required',
    'string',
    ...
    new ValidateLatinEmail()
]
正如您所看到的,您的正则表达式就是验证的问题

这一条应该有效:

public function passes($attribute, $value)
{
    return filter_var($value, FILTER_VALIDATE_EMAIL) 
        && preg_match('/@[\x00-\x7F]*\./', $value);
}
只返回filter\u var$value,filter\u VALIDATE\u EMAIL;在PASS方法中??