Несовместимый формат электронной почты в поле ввода html с проверкой электронной почты laravel

В моем блейд-файле у меня есть HTML-форма для пользователя, в которой поле ввода email имеет тип email. Но я думаю, что это обеспечивает непоследовательную проверку формата электронной почты. пример показывает, что abc@xyz и abc@xyz.com оба являются правильными адресами электронной почты, но в моем контроллере метод проверки возвращает мне неверный формат электронной почты для abc@xyz. Как я могу решить эту проблему???

В моем блейд-файле:

<input type="email" name="email" value="">

И в моем контроллере:

$validator = Validator::make($request->all(), [
     'email'       => 'email|unique:table_name,col_name',
    ],[
     'email.unique' => 'email is already in used',
   ]);

if ($validator->fails()) {
    return redirect()->back()->withInput($request->all())->withErrors($validator);
  }

1 ответ

Решение

На самом деле Laravel использует PHP встроенная функция называется filter_var ( исходный код).

// Illuminate\Validation\Concerns\ValidateAttributes

/**
 * Validate that an attribute is a valid e-mail address.
 *
 * @param  string  $attribute
 * @param  mixed   $value
 * @return bool
 */
public function validateEmail($attribute, $value)
{
    return filter_var($value, FILTER_VALIDATE_EMAIL) !== false;
}

Правила, реализованные PHP Совершенно иначе с правилами, реализованными в браузере. abc@xyz передал правило проверки браузера, потому что xyz является действительным hostname (вы можете прочитать это здесь). Но PHP внедрение более строгого правила, согласно которому адрес электронной почты должен содержать домен верхнего уровня.

Другие вопросы по тегам