有人之前想过这个问题吗?能否建议如何处理这种类型的错误?
@hashim-aziz指出MailCheck已经被放弃了一段时间,并推荐使用EmailSpellChecker.js。
我仍然相信JavaScript的“你确定吗?”解决方案是用户体验最好的,其次是确认电子邮件。当您发送确认电子邮件时,请务必包含一个“不是我的”选项。 使用您的网站分析来定制您的建议列表。
在提问时它还不存在,但我建议使用MailCheck,它会自动提供对输入电子邮件的纠正建议。 它已被大公司成功使用。
有人能建议如何处理这种错误吗?
通常会向给定的地址发送确认电子邮件,并仅在该电子邮件中的链接被点击后才继续。
没有其他好的方法来处理这个问题 - 它不可能确定gmial.com
是否是打字错误,因为它是一个有效的域名。
gmial.com
地址和其他常见的拼写错误之前,没有什么不可以建议进行更正。感谢你的建议!+1 - Pekkahotmail.com
gmail.com
googlemail.com
... etc
当用户输入电子邮件地址时,请获取所输入地址的域名,并计算其与您列表中的域名之间的Levenstein距离。如果距离为1(或可能为2),则要求用户确认这是他们想要的电子邮件地址。
我认为很难为通用情况找到通用解决方案。
话虽如此,最常见的错误是交换两个相邻字母。 因此,您可能需要检查最大的网站Gmail、Yahoo等的字符内容;基于此,如果原始内容与Gmail等不匹配,则建议替代拼写。
是的@spmsupun,这个库已经不再维护(自最后一次更新以来已经有7年了),还包含一些像这样或者这样的错误。
我完全重写了它,并将其更新到2022年及以后,欢迎贡献者加入:https://github.com/ZooTools/email-spell-checker
甚至在README上链接的域名也已经过期。
根据Email Spell Checker的开发者,与mailcheck.js相比,改进之处包括:
- Written in TypeScript and removed jQuery
- Reduced bundle size to <2KB.
- Update TLDs (69+) and added modern startup domains (like .io, .so, .xyz or .dev)
- Implemented suggestions that people made [to mailcheck.js] that were ignored
试图自动纠正错误数据是一种非常危险的做法。最终,只有用户能提供正确的数据。但是,有关电子邮件地址格式的严格规则存在 - 可以在javascript中运行regex检查(或使用具有相同regex语法的preg函数) - 但请注意,互联网上有很多错误的regex示例声称解决了这个问题。
这应该是RFC2822 ADDR_SPEC验证器的一个相当完整的实现:
/[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
然后,在服务器端,您可以进行 MX查找以验证提供的域名不仅符合格式要求,而且作为电子邮件接收站存在。
这并不能证明该站点上存在命名的邮箱,也不能证明它正在接受电子邮件 - 最终,您需要发送一封包含回传链接/密码的电子邮件到该地址,以确定电子邮件地址是否有效。
更新
虽然正如此处最高票答案所说,验证ADDR_SPEC的最佳方法是向要提交的地址发送一个令牌,通过网络返回,但如果数据不来自控制邮箱的人,并且即使他们这样做,操作与主要交互分离,这对于验证没有太大帮助。另一个考虑因素是,今天有效的电子邮件地址可能明天就无效了。
使用正则表达式(和MX查找)仍然是提供即时反馈给用户的好方法,但对于完整的解决方案,您还需要监视退信。
就像之前提到的那样,自动假设某人输错了电子邮件并不是一个好主意。更好的方法是实现一个小的JavaScript函数,检查电子邮件的域名是否可能输错,并警告用户,而不是从一开始就假定他们是错误的。
给我一分钟来创建一个小模型。
编辑:好的,也许不只是一分钟。看看 http://jsbin.com/iyaxuq/8/edit,亲自体验JavaScript如何帮助防止常见的打字错误。试试像:test@gmail.cmo,another@yhaoo.com,loser@htomali.ocm(hotmail的拼写错误)和me@aol.com这样的电子邮件。
注意:我使用了懒惰的正则表达式来验证电子邮件。在真正的应用程序中不要依赖它(或大多数正则表达式)。
你不能以自动更正拼错的电子邮件域名的方式提供此功能,因为你所认为无效的名称实际上可能是有效的。你应该预期任何东西都可以作为电子邮件地址域名输入。
我建议,如果你正在创建注册表格,那么你可以向用户提供一个下拉菜单,其中包含你所知道的所有可能的域名,这样他就可以从中选择。
希望这能帮到你。