【问题标题】:Laravel email validation issueLaravel 邮件验证问题
【发布时间】: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


【解决方案1】:

根据您的问题,我了解到您已经创建了自定义验证规则并像使用它一样

...
'email' => [
    'required',
    'string',
    ...
    new ValidateLatinEmail()
]

如您所见 here,您的 RegEx 是验证的问题

这个应该可以的:

public function passes($attribute, $value)
{
    return filter_var($value, FILTER_VALIDATE_EMAIL) 
        && preg_match('/@[\x00-\x7F]*\./', $value);
}

【讨论】:

    猜你喜欢
    • 2020-08-14
    • 2020-11-18
    • 2015-04-02
    • 1970-01-01
    • 1970-01-01
    • 2020-11-18
    • 1970-01-01
    • 2019-02-07
    • 2020-11-08
    相关资源
    最近更新 更多