【发布时间】:2018-04-01 09:44:01
【问题描述】:
默认 Laravel 验证类允许奇怪的电子邮件。这是我定义的验证规则:
return Validation::make($data, [
'email' => 'required|string|email|max:100|unique:customers,email'
]);
当我尝试使用一些奇怪的电子邮件时,例如:
aaaa?#%&'@şğüçi̇ö.com 它通过了验证。但是,电子邮件中的非拉丁字符会在数据库插入之前进行转换。因此数据库中的电子邮件地址与原始电子邮件地址不匹配。
为了防止这种情况,我想禁止在 @ 符号后使用非拉丁字符。我尝试了自定义规则:
public function passes($attribute, $value)
{
return filter_var($value, FILTER_VALIDATE_EMAIL)
&& preg_match('/@.+\./', $value);
}
但它不起作用。在这方面获得一些帮助会很好。
编辑 1 感谢您的回复!但显然自定义验证器没有采取行动的原因是 Laravel 在任何操作之前都会清理所有输入数据。这就是为什么在转换非拉丁字符后,preg_replace() 一直返回 1,因为输入中没有非拉丁字符。首先,我需要找到解决方案并阻止 Laravel 清理输入。
【问题讨论】:
-
passes 方法中的
return filter_var($value, FILTER_VALIDATE_EMAIL);怎么样??
标签: laravel validation laravel-5