【问题标题】:Laravel Email Validation letting "user@hotmail" throughLaravel 电子邮件验证让“user@hotmail”通过
【发布时间】:2019-09-07 21:13:50
【问题描述】:

我正在通过 FormRequest 使用 Laravel 的验证。代码摘录在这里。似乎 laravel 的验证是让诸如“user@hotmail”之类的电子邮件地址通过。

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class DirectorForm extends FormRequest
{
    public function rules()
    {
        return [
            'email' => 'required|email',
        ];
    }
}

上面的验证似乎允许“username@hotmail”,这不是一个有效的电子邮件地址。

我是不是设置错了

【问题讨论】:

  • 这是一种有效的电子邮件地址格式。一个正则表达式只能做这么多

标签: laravel laravel-5


【解决方案1】:

实际上user@hotmail 是一个有效的电子邮件,因为user@localhost 也可以是一个有效的电子邮件地址。
如果您想检查电子邮件地址是否还包含TLD,您可以尝试:

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class DirectorForm extends FormRequest
{
    public function rules()
    {
        return [
            'email' => 'required|regex:.+@.+\..+',
        ];
    }
}

有关更多正则表达式电子邮件验证规则,请查看this answer

【讨论】:

    【解决方案2】:

    您可以为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',
            ];
        }
    

    【讨论】:

      【解决方案3】:

      使用来自https://emailregex.com/的正则表达式

      并结合 Laravel 正则表达式规则:https://laravel.com/docs/5.8/validation#rule-regex

      【讨论】:

        【解决方案4】:

        看来验证正在按预期工作。感谢阅读!

        【讨论】:

          猜你喜欢
          • 2020-03-18
          • 2018-08-15
          • 2023-03-26
          • 2022-10-20
          • 1970-01-01
          • 2011-03-21
          • 2012-08-23
          • 2011-03-15
          • 1970-01-01
          相关资源
          最近更新 更多