Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何更正拼写错误的电子邮件地址域?_Php_Email_Dns - Fatal编程技术网

Php 如何更正拼写错误的电子邮件地址域?

Php 如何更正拼写错误的电子邮件地址域?,php,email,dns,Php,Email,Dns,有时用户拼错了他们的电子邮件域,因此他们输入了错误的电子邮件地址。 如。abc@gmial.com而不是abc@gmail.com 以前有人想过这个吗?有人能建议如何处理这类错误吗 有人能建议如何处理这类错误吗 您通常会向给定的地址发送一封确认电子邮件,并且只有在该电子邮件中的链接被单击时才能继续 没有其他好的方法来处理这个问题-无法确定gmial.com是否是一个打字错误,因为它是一个有效的域。有趣的是,url确实存在 事实上,你很难知道这是一个错误还是一个“奇怪”的领域。看看谷歌API,因为

有时用户拼错了他们的电子邮件域,因此他们输入了错误的电子邮件地址。 如。abc@gmial.com而不是abc@gmail.com

以前有人想过这个吗?有人能建议如何处理这类错误吗

有人能建议如何处理这类错误吗

您通常会向给定的地址发送一封确认电子邮件,并且只有在该电子邮件中的链接被单击时才能继续


没有其他好的方法来处理这个问题-无法确定
gmial.com
是否是一个打字错误,因为它是一个有效的域。

有趣的是,url确实存在 事实上,你很难知道这是一个错误还是一个“奇怪”的领域。看看谷歌API,因为当你在谷歌输入错误的东西时,他们会建议你“你是说……”

祝你好运


Arnaud

在我看来,几乎不可能为一般情况提出一个通用解决方案

也就是说,最常见的打字错误是互换两个常用字母。 因此,你可能想查看gmail、yahoo等大型网站的人物内容;基于此,如果原文与gmail等不匹配,建议使用另一种拼写

  • 不要认为用户有错,如果与普通名称相比,它看起来可疑,则建议其他选择。另一份答复中提到了白名单
  • 如果你需要知道你可以从这个地址得到回复,请使用确认邮件。 您不能假设您发现的拼写错误,这就是确认邮件的用途
  • 让它非常不突兀(我想到了ajax)

如前所述,自动假定有人键入了错误的电子邮件不是一个好主意。更好的方法是实现一个小javascript函数,检查电子邮件域是否可能输入错误,并提醒用户,而不是假设他们从一开始就错了

给我一分钟来制作一个小模型

编辑:好的,所以可能是一分钟多。看看javascript如何帮助防止常见的键入错误。尝试以下电子邮件:test@gmail.cmo, another@yhaoo.com, loser@htomali.ocm(hotmail打字错误),以及me@aol.com.


注意:我使用了惰性正则表达式来验证电子邮件。不要依赖它(或者对于大多数正则表达式)来实现真正的应用程序。

您不能以自动更正拼写错误的电子邮件域名的方式提供此功能,因为您假定无效的名称将是有效的。您应该希望任何东西都可以作为电子邮件地址域名输入

我建议,如果你正在创建一个注册表单,你可以为用户提供一个下拉列表,其中包含你知道的所有可能的域名,这样他就可以从中进行选择


希望这有帮助。

您可以在数据库中创建一个流行电子邮件域列表(gmail.com、yahoo.com、ymail.com等),并验证用户根据此列表输入的电子邮件地址,如果该域与其中一个域相似,则应显示警告,并允许用户在必要时更正,而不是自动更正。要将输入的域与列表中的域进行比较,您可以使用类似SQL Server中
soundex
函数中使用的算法,该算法根据一个词是否听起来像第二个词来匹配单词


编辑:您可以找到。

尝试自动更正错误数据是一种非常危险的做法。最终,只有用户才能提供正确的数据。然而,对电子邮件地址的格式有严格的规定——正则表达式检查可以在javascript中运行(或者使用具有相同正则表达式语法的preg函数)——但请注意,在互联网上有许多正则表达式声称解决了这个问题的坏例子

这应该是RFC2822 ADDR_规范验证器的一个相当完整的实现:

/[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/gi
然而,在实践中,我发现这是足够的:

/^[a-z0-9\._%+!$&*=^|~#%'`?{}/\-]+@([a-z0-9\-]+\.){1,}([a-z]{2,22})$/gi
然后,在服务器端,您可以进行验证,以验证提供的域不仅满足格式要求,而且作为电子邮件接收站点存在

这并不能证明指定邮箱存在于该站点,也不能证明它正在接受电子邮件-最终,您需要向该地址发送电子邮件,包括单击返回链接/密码,以确定电子邮件地址是否有效

更新

虽然,正如这里投票最多的答案所说,验证ADDR_规范的最佳方法是将令牌发送到要通过web提交回的地址,但如果数据不是来自控制邮箱的人,并且即使操作与主交互分离,这也没有多大帮助。进一步考虑的是,今天有效的电子邮件地址可能明天无效


使用正则表达式(和MX查找)仍然是向用户提供即时反馈的好主意,但要获得完整的解决方案,您也需要这样做。

在我们的表单中,我们使用了多种技术的组合。虽然坏数据仍有可能漏掉,但可能性大大降低

首先是做一个常见的简单格式化正则表达式——只需确保它符合RFC。如果失败,最好在此时向用户提供一个确认表单,因为在修复此问题时,他们可能会为您捕获其他错误

下一部分是检查域的TLD部分。由于所有TLD都是已知的,因此使用一些正则表达式测试可以相对容易地扫描拼写错误。只需将所有当前TLD的列表保存在一个表中的某个位置,并根据需要不时更新(请注意,在处理国际TLD时,此列表可能会变得复杂。如果您只处理美国交通,则规则会更简单,这是您可以过滤掉的其他内容。例如
hotmail.com
gmail.com
googlemail.com
... etc