是否有全面的方法来测试两个电子邮件地址是否相等?我知道我可以普遍降低两者。但是还有一些其他规则因服务器而异。例如“william.burroughs@gmail.com”,“will.iam.burroughs@gmail.com”和“williamburroughs@gmail.com”等同于gmail。但我不认为在所有情况下都是如此。因此,给定两个电子邮件地址,我需要确保它们是等效的。目前我的代码不认为“william.burroughs@gmail.com”和“williamburroughs@gmail.com”是相同的。我可以开始特别包装像“gmail”这样的东西,所以他们是,但我希望有更好的方法。
答案 0 :(得分:1)
如果您将2个不同的电子邮件地址作为字符进行比较,您可能需要考虑使用正则表达式将它们拆分以进行比较。一个简单的可以作为“([\ 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 :(得分:0)
来自给定电子邮件提供商的自定义编码规则集的一部分(例如,gmail为您的示例)我认为没有任何其他方式......
答案 2 :(得分:0)
Gmail实际上只有两个自定义规则
.
)。使用gge地址的正则表达式很容易克服这个问题。+
之后的任何内容。再次。正则表达式将修复此gmail地址。我认为最大的挑战是Google托管数千个基于云的域名,这些域名不会以googlemail.com
或gmail.com
结尾。识别这些的唯一方法是进行DNS查找并查看域指向的MX记录。这是一个有效的python示例:
你可以用任何其他语言做同样的事情。查看Gmail或googlemail的“MX”记录。
对于任何非谷歌域名,您可以进行小写字符串比较。
答案 3 :(得分:-2)
这可行,但也许我不明白你的问题
String email1 = new String("william.burroughs@gmail.com");
String email2 = new String("williamburroughs@gmail.com");
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");
}
}