在 Laravel 请求中验证电子邮件域

Validate email domain in Laravel request

我想在有人注册时只接受来自一台服务器的电子邮件,例如“@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',*/
    ]);
}

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

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'],

Note: When using the regex pattern, it may be necessary to specify rules in an array instead of using pipe delimiters, especially if the regular expression contains a pipe character.

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

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);}

因为添加了 laravel 5.8.17 ends_with 验证规则,看起来像这样:

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