Laravel电子邮件验证允许“ user @ hotmail”通过

时间:2019-04-17 15:01:37

标签: laravel laravel-5

我正在通过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”,这不是有效的电子邮件地址。

我是否设置错误

4 个答案:

答案 0 :(得分:2)

实际上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

答案 1 :(得分:1)

使用来自https://emailregex.com/

的正则表达式

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

答案 2 :(得分:0)

看来验证正在按预期进行。感谢您的阅读!

答案 3 :(得分:0)

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