在Laravel中验证电子邮件地址

25

我在Laravel应用程序中创建了一个编辑表单,用于接收电子邮件地址。我已经在服务器端使用了Laravel验证。当我传递一个明显无效的值,如“xxxxxx”时,它可以正确地验证电子邮件地址。

但是问题在于当我发送一个没有点的顶级域的电子邮件地址,例如“xxxxxx@yyyyyy”时,它将其作为有效的电子邮件地址接受。

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


你能够探索一些代码吗? - Kalpashree V. Bal
请展示一下您如何验证电子邮件?代码应该长这样:$data= $request->validate([ 'email' => 'required|email' ]); 您可以在文档中找到所有相关信息 https://laravel.com/docs/5.8/validation#rule-email - CaShiS
相关文章:*Laravel电子邮件验证:注意您的验证方式* - Peter Mortensen
它真的解决了问题吗?因为我遇到过类似的问题,我的用户会将单词 gmail.com 拼错成 gmsil.com。但它仍然允许这种错误,因为 gmsil.com 是一个有效的域名。但如果我尝试使用任意随机字符串作为电子邮件前缀并添加 @gmsil.com ,它仍然允许通过。 - ajay makwana
5个回答

54

使用 Laravel 7:您可以使用

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

它对我有效,但你能解释一下它是做什么的吗?(:rfc,dns) - Ali Ahmad Pasa
1
这里有文档记录:https://laravel.com/docs/9.x/validation#rule-email - sha-1
它有效了,谢谢。我不需要使用正则表达式来验证.com。 - Dedi Ananto

11

试试这个:

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

我改变了我的答案。 - albus_severus
2
需要进行解释。例如,这个想法/主旨是什么?它的限制是什么?它会失败吗?使用正则表达式进行电子邮件地址验证被认为非常复杂甚至不可能。根据帮助中心的说法:“...始终要解释为什么你提出的解决方案是合适的以及它是如何工作的”。请通过编辑(更改)您的答案来回应,而不是在评论中回应(不要添加“编辑:”,“更新:”或类似内容 - 答案应该看起来像是今天写的)。 - Peter Mortensen

11
您可以简单地执行以下操作:
$validator = Validator::make($request->all(), [
        'Email'=>'required|email'
    ]);


1
我在Laravel 8.x中遇到了同样的问题。上述代码不符合要求。简而言之,即使您有(exampl@domain),它也会变成绿色。 - Sam

5
这并不是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";
    }

1
注意:MX记录不是托管有效的工作电子邮件服务器所必需的。如果MX记录不存在,则会使用“@” A记录。 - John Hanley

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

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

"

1
关于“用于代码的唯一电子邮件插入数据库”的问题:这几乎是无法理解的。您能否重新表述一下?请通过编辑(更改)您的答案来回应,而不是在此处发表评论(不要包含“编辑:”、“更新:”或类似内容——答案应该看起来像是今天写的)。 - Peter Mortensen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接