【问题标题】:Validate email domain in Laravel request在 Laravel 请求中验证电子邮件域
【发布时间】:2021-11-03 03:57:27
【问题描述】:

当有人注册时,我想只接受来自一台服务器的电子邮件,例如“@myemail.com”。如果提供任何其他电子邮件地址,它会说您的电子邮件无效。

下面是我的注册控制器的验证器。我该怎么办?

protected function validator(array $data)
{
    return Validator::make($data, [
        'name' => 'required|max:255',
        'email' => 'required|email|max:255|unique:users',
        'password' => 'required|min:6|confirmed',
        /*'usertype' => 'required',*/
    ]);
}

【问题讨论】:

    标签: php laravel email laravel-validation


    【解决方案1】:

    您可以为此使用正则表达式模式。将此附加到您的电子邮件验证中:

    protected function validator(array $data)
    {
        return Validator::make($data, [
            'name' => 'required|max:255',
            'email' => 'required|email|max:255|regex:/(.*)@myemail\.com/i|unique:users',
            'password' => 'required|min:6|confirmed',
            /*'usertype' => 'required',*/
         ]);
    }
    

    编辑
    对于多个域,您必须使用数组进行验证,因为两个邮件域之间存在管道:

    'email' => ['required', 'max:255', 'email', 'regex:/(.*)@(mrbglobalbd|millwardbrown)\.com/i', 'unique:users'],
    

    注意:使用正则表达式模式时,可能需要在数组中指定规则而不是使用管道分隔符,尤其是当正则表达式包含管道字符时。

    【讨论】:

    • 如果我想验证 2 个邮件服务器类型 ID 的 myemailmyemail2 怎么办?我应该在哪里添加??
    • 您可以更新模式并在括号中包含多个域。我已经更新了我的答案。
    • 显示错误ErrorException in Validator.php line 1798: preg_match(): No ending delimiter '/' found
    • @incorporeal 请出示您的代码'email' => '...
    • 这里是'email' => 'required|email|max:255|regex:/(.*)@(mrbglobalbd|millwardbrown)\.com/i|unique:users'
    【解决方案2】:

    自从 laravel 5.8.17 添加了ends_with 验证规则,如下所示:

    $rules = [
        'email' => 'required|ends_with:laravel.com,jasonmccreary.me,gmail.com',
    ];
    

    【讨论】:

    • 我建议ends_with:@laravel.com... 是安全的,同时保持email 规则到位。
    【解决方案3】:

    请在您的电子邮件验证行中进行以下更改。您可以在验证器规则中扩展电子邮件验证,例如:

    protected function validator(array $data){
      $messages = array('email.regex' => 'Your email id is not valid.');
    
      return Validator::make($data, [
        'name' => 'required|max:255',
        'email' => 'required|email|max:255|unique:users|regex:/(.*)\.myemail\.com$/i',
        'password' => 'required|min:6|confirmed',
        /*'usertype' => 'required',*/
     ], $messages);}
    

    【讨论】:

      猜你喜欢
      • 2017-06-23
      • 1970-01-01
      • 2015-06-25
      • 2020-03-18
      • 2016-05-12
      • 2021-02-19
      • 2019-02-12
      • 2021-02-15
      • 1970-01-01
      相关资源
      最近更新 更多