如何测试两个电子邮件地址是否相等

时间:2013-12-17 16:47:28

标签: java email

是否有全面的方法来测试两个电子邮件地址是否相等?我知道我可以普遍降低两者。但是还有一些其他规则因服务器而异。例如“william.burroughs@gmail.com”,“will.iam.burroughs@gmail.com”和“williamburroughs@gmail.com”等同于gmail。但我不认为在所有情况下都是如此。因此,给定两个电子邮件地址,我需要确保它们是等效的。目前我的代码不认为“william.burroughs@gmail.com”和“williamburroughs@gmail.com”是相同的。我可以开始特别包装像“gmail”这样的东西,所以他们是,但我希望有更好的方法。

4 个答案:

答案 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实际上只有两个自定义规则

  1. 忽略任何句点(.)。使用gge地址的正则表达式很容易克服这个问题。
  2. 忽略+之后的任何内容。再次。正则表达式将修复此gmail地址。
  3. 我认为最大的挑战是Google托管数千个基于云的域名,这些域名不会以googlemail.comgmail.com结尾。识别这些的唯一方法是进行DNS查找并查看域指向的MX记录。这是一个有效的python示例:

    http://eran.sandler.co.il/2011/07/17/determine-if-an-email-address-is-gmail-or-hosted-gmail-google-apps-for-your-domain/

    你可以用任何其他语言做同样的事情。查看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");
            }

     }