Search code examples
phplaravelemaillaravel-validation

Validate email domain in Laravel request


I want to accept email from just one server when someone is registering, for example "@myemail.com". If any other email address is given it will say your email is not valid.

Below is the validator of my registration controller. What should I do?

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',*/
    ]);
}

Solution

  • You could use a regex pattern for this. Append this to your email validation:

    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',*/
         ]);
    }
    

    EDIT
    With mutiple domains you have to use an array with your validations, because of the pipe between the two mail domains:

    '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.