html输入字段的电子邮件格式与laravel电子邮件验证不一致

Posted

技术标签:

【中文标题】html输入字段的电子邮件格式与laravel电子邮件验证不一致【英文标题】:inconsistent email format of html input field with laravel email validation 【发布时间】:2018-07-31 16:30:32 【问题描述】:

在我的刀片文件中,我有一个用户的 html 表单,其中输入字段电子邮件的类型为电子邮件。但我认为它提供了不一致的电子邮件格式验证。例如它显示 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);
  

【问题讨论】:

我猜abc@xyz 无效。 en.wikipedia.org/wiki/Email_address 是的,abc@xyz 不是有效的电子邮件地址,但 html 输入字段 type="email" 接受它作为有效的电子邮件地址格式 那是ok (see email paragrapgh)。根据 wiki,您会看到 user@localserver 一直有效。您可以使用 jQuery 添加自己的前端验证。 你能提供那个jQuery代码吗 【参考方案1】:

实际上 Laravel 使用 php 内置函数称为 filter_var (source code)。

// 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(你可以阅读它here)。但是PHP 实施了更严格的规则,即电子邮件地址应包含***域。

【讨论】:

感谢 saputra 的回答

以上是关于html输入字段的电子邮件格式与laravel电子邮件验证不一致的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5 & 在单个字段中验证多个电子邮件地址

电子邮件地址字段的值已被使用。 laravel 请求验证

如果给出电子邮件ID,则无法通过jquery val()函数从电子邮件字段获取值

Laravel Auth 登录验证编辑

除了提交表单之外,触发 html5 电子邮件验证器失去焦点

在 oracle apex 中通过电子邮件发送富文本字段