Несовместимый формат электронной почты в поле ввода 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
внедрение более строгого правила, согласно которому адрес электронной почты должен содержать домен верхнего уровня.