是否有全面的方法来测试两个电子邮件地址是否相等?我知道我可以普遍降低两者。但是还有一些其他规则因服务器而异。例如,“[email protected]”,“[email protected]”和“[email protected]”等都适用于Gmail。但我不认为在所有情况下都是如此。所以给了两个电子邮件地址我需要确保它们是相同的。目前我的代码并不认为“[email protected]”和“[email protected]”是一样的。我可以开始特殊的外壳,比如“gmail”,所以他们是,但我希望有一个更好的方法。如何测试两个电子邮件地址是否相等
回答
Gmail只会真的有定制
- 任何时期(
.
)被忽略两个规则。用gmail地址的正则表达式很容易解决这个问题。 +
之后的任何内容都将被忽略。再次。一个正则表达式将修复这个gmail地址。
我看到的最大挑战是Google承载了数千个基于云的域,这些域不以googlemail.com
或gmail.com
结尾。识别这些信息的唯一方法是进行DNS查找并查看该域指向的MX记录。这里是一个可行的Python的例子:
你可以做同样的任何其他语言。查看gmail或googlemail的'MX'记录。
对于任何非谷歌域,您可以做一个小写字符串比较。
除了这个答案之外没有兴奋,因为它只是证实了我的恐惧。嘿。但是,我认为你是对的。不幸的是,我不得不处理成千上万的用户,并检查这将是时间过于紧张。 –
您应该添加字符串比较只能确定2个地址相等。他们无法确定2个地址不能传送到同一个邮箱。所以'xy @ zzz.com'和'xavier.yuan @ zzz.com'在某种意义上仍然是“平等的”。 – Ingo
,因为这两条规则不是来自Google,而是来自邮件协议本身(Google只是实现这一点的唯一(大型)提供商,据我所知) - 是否可以安全地将来自其他提供商的邮件地址与这两条规则进行匹配,还是有提供商,这些邮件给这些邮件不同的“加号或点分隔”到不同的邮箱/用户? – cyptus
的一部分从给定的电子邮件服务提供商的规则自定义编码集(例如Gmail服务的例子),我不认为有任何其他方式...
下面这个工作,但也许我不明白你的问题
String email1 = new String("[email protected]");
String email2 = new String("[email protected]");
Pattern emailFinder = Pattern.compile("gmail.com");
Matcher emailmatcher = emailFinder.matcher(email1);
Matcher emailmatcher1 = emailFinder.matcher(email2);
if (emailmatcher.find() && emailmatcher1.find()) {
email1 = email1.replaceAll(".","");
email2 = email2.replaceAll(".","");
if(email1.equals(email2)){
System.out.println("The values match");
}
}
显然,按照gmail的惯例,字符串比较是不够的。这在问题中已经很清楚地表明了。 – Joel
是的我认为我忽略了 – user2600629
使用新的String(“”),x1。等于(s2)== true,按位而且,您的变量名称(以大写字母开头)都是非常糟糕的样式。 –
如果您将两个不同的电子邮件地址作为字符进行比较,您可能需要考虑使用正则表达式将它们拆分以进行比较。一个简单的可以工作为“([\ w \。] +)@([\ w \。] + \。\ w +)”。您可以通过交换机运行组2,以适当地比较组1,默认为更一般的比较。
boolean emailsEquals(String email1,String email2) {
Pattern address=Pattern.compile("([\\w\\.]+)@([\\w\\.]+\\.\\w+)");
Matcher match1=address.matcher(email1);
Matcher match2=address.matcher(email2);
if(!match1.find() || !match2.find()) return false; //Not an e-mail address? Already false
if(!match1.group(2).equalsIgnoreCase(match2.group(2))) return false; //Not same serve? Already false
switch(match1.group(2).toLowerCase()) {
case "gmail.com":
String gmail1=match1.group(1).replace(".", "");
String gmail2=match2.group(1).replace(".", "");
return gmail1.equalsIgnoreCase(gmail2);
default: return match1.group(1).equalsIgnoreCase(match2.group(1));
}
}
希望它有帮助!
- 1. 确定是否电子邮件地址的邮件列表地址或个人电子邮件地址
- 2. GMail:这个listserv电子邮件地址是哪个电子邮件地址?
- 3. 有没有办法测试一个电子邮件地址是否存在而不发送测试邮件?
- 4. 测试两个PersistenceContexts是否相等
- 5. 测试两个对象是否相等
- 6. 试图发送电子邮件地址给两个收件人
- 7. 如何检查电子邮件地址是否是假的?
- 8. 将电子邮件域与电子邮件地址相匹配
- 9. 如何了解电子邮件地址是否为教育电子邮件地址?
- 10. 如何验证YMail,Gmail等电子邮件地址是否存在?
- 11. JMeter - 如何模拟电子邮件地址和确认电子邮件地址
- 12. 如何检查电子邮件地址是否有效?
- 13. 我们如何检查电子邮件地址是否有效?
- 14. 如何验证电子邮件地址是否存在?
- 15. 如何查看电子邮件地址是否有效?
- 16. 如何检查电子邮件地址是否存在?
- 17. 如何检查电子邮件地址是否存在codeigniter
- 18. 如何找出电子邮件地址是否存在?
- 19. 如何检查电子邮件地址是否存在。验证
- 20. 如何检查电子邮件地址是否正常工作?
- 21. 如何检查电子邮件地址是否属于Gmail
- 22. 如何知道电子邮件地址是否无效?
- 23. 如何通过电子邮件发送电子邮件地址
- 24. 试图使用电子邮件地址
- 25. 试图欺骗电子邮件地址
- 26. Facebook是否仍支持代理邮件电子邮件地址?
- 27. 如何检查电子邮件地址是否与Paypal帐户相关联?
- 28. 如何在xunit.net中测试两个对象是否相等?
- 29. 如何测试python中两个对象是否相等?
- 30. 在R中,如何测试两个因素是否相等?
如果gmail是唯一允许的提供者,那么不幸的是你需要一个单独的案例。 – Joel
我想说google是个例外。所有其他邮件服务器都是不同的电子邮件地址。 – rekire
您的gmail案例将忽略'。',其他提供商 - 不要忽略。 – KevinDTimm