【问题标题】:Validation of an email address in Laravel在 Laravel 中验证电子邮件地址
【发布时间】:2020-03-02 15:56:30
【问题描述】:

我在我的 Laravel 申请表中创建了一个编辑表单,它接受一个电子邮件地址。我在服务器端使用了 Laravel 验证。当我传递一个明显无效的值(如“xxxxxx”)时,它正在正确验证电子邮件地址。

但问题是,当我发送一个只有顶级域且没有像“xxxxxx@yyyyyy”这样的点的电子邮件地址时,它会接受它作为有效的电子邮件地址。

如何验证电子邮件地址以确保它使用正确的域?

【问题讨论】:

标签: laravel validation email


【解决方案1】:

Laravel 电子邮件验证和用于代码的唯一电子邮件插入数据库:

'email_address' => 'required|email|unique:customers,email_address'

【讨论】:

  • Re "unique email insert database use for code":几乎无法理解。请问可以rephrase吗?请通过editing (changing) your answer 回复,而不是在 cmets 中(without "Edit:"、"Update:" 或类似的 - 答案应该看起来像是今天写的)。
【解决方案2】:

这不是 Laravel 的问题。从技术上讲,这是一个有效的电子邮件地址。

请注意,如果您告诉浏览器验证电子邮件地址,它也会通过。

但是您可以使用包 EmailValidator 来验证电子邮件地址。

首先,还要检查这些:https://laravel.com/docs/6.x/validation#rule-email

或者,

使用 checkdnsrr 功能。

<?php

    $email = 'email@gmail.com';
    list($username, $domain) = explode('@', $email);

    if (checkdnsrr($domain, 'MX')) {
      echo "verified";
    }
    else {
      echo "failed";
    }

【讨论】:

  • 注意:托管有效的工作电子邮件服务器不需要 MX 记录。如果MX记录不存在,则使用@A记录。
【解决方案3】:

试试这个:

$this->validate($request, [            
  'email' => 'required|regex:/(.+)@(.+)\.(.+)/i',
]);

【讨论】:

  • 我改了答案
  • 解释一下。例如,想法/要点是什么?它有什么限制?它会因为什么而失败?众所周知,通过正则表达式验证电子邮件地址非常复杂,甚至是不可能的。来自the Help Center“...总是解释为什么你提出的解决方案是合适的以及它是如何工作的”。请通过editing (changing) your answer 回复,而不是在 cmets 中(without "Edit:"、"Update:" 或类似的 - 答案应该看起来像是今天写的)。
【解决方案4】:

有了 Laravel 7:你可以使用

'email' => 'email:rfc,dns'

【讨论】:

    【解决方案5】:

    你可以这样做:

    $validator = Validator::make($request->all(), [
            'Email'=>'required|email'
        ]);
    
    

    【讨论】:

    • 我在 Laravel 8.x 中遇到了同样的问题。上述代码不能按要求工作。简而言之,即使您拥有 (exampl@domain),它也会变绿。
    猜你喜欢
    • 2015-06-25
    • 1970-01-01
    • 2014-06-12
    • 1970-01-01
    • 2012-09-27
    • 2021-07-03
    • 2018-03-13
    • 2011-09-02
    • 2013-02-20
    相关资源
    最近更新 更多