2013-12-17 55 views
4

是否有全面的方法来测试两个电子邮件地址是否相等?我知道我可以普遍降低两者。但是还有一些其他规则因服务器而异。例如,“[email protected]”,“[email protected]”和“[email protected]”等都适用于Gmail。但我不认为在所有情况下都是如此。所以给了两个电子邮件地址我需要确保它们是相同的。目前我的代码并不认为“[email protected]”和“[email protected]”是一样的。我可以开始特殊的外壳,比如“gmail”,所以他们是,但我希望有一个更好的方法。如何测试两个电子邮件地址是否相等

+0

如果gmail是唯一允许的提供者,那么不幸的是你需要一个单独的案例。 – Joel

+0

我想说google是个例外。所有其他邮件服务器都是不同的电子邮件地址。 – rekire

+0

您的gmail案例将忽略'。',其他提供商 - 不要忽略。 – KevinDTimm

回答

0

Gmail只会真的有定制

  1. 任何时期(.)被忽略两个规则。用gmail地址的正则表达式很容易解决这个问题。
  2. +之后的任何内容都将被忽略。再次。一个正则表达式将修复这个gmail地址。

我看到的最大挑战是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'记录。

对于任何非谷歌域,您可以做一个小写字符串比较。

+0

除了这个答案之外没有兴奋,因为它只是证实了我的恐惧。嘿。但是,我认为你是对的。不幸的是,我不得不处理成千上万的用户,并检查这将是时间过于紧张。 –

+1

您应该添加字符串比较只能确定2个地址相等。他们无法确定2个地址不能传送到同一个邮箱。所以'xy @ zzz.com'和'xavier.yuan @ zzz.com'在某种意义上仍然是“平等的”。 – Ingo

+0

,因为这两条规则不是来自Google,而是来自邮件协议本身(Google只是实现这一点的唯一(大型)提供商,据我所知) - 是否可以安全地将来自其他提供商的邮件地址与这两条规则进行匹配,还是有提供商,这些邮件给这些邮件不同的“加号或点分隔”到不同的邮箱/用户? – cyptus

0

的一部分从给定的电子邮件服务提供商的规则自定义编码集(例如Gmail服务的例子),我不认为有任何其他方式...

-2

下面这个工作,但也许我不明白你的问题

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"); 
      } 

    } 
+0

显然,按照gmail的惯例,字符串比较是不够的。这在问题中已经很清楚地表明了。 – Joel

+0

是的我认为我忽略了 – user2600629

+0

使用新的String(“”),x1。等于(s2)== true,按位而且,您的变量名称(以大写字母开头)都是非常糟糕的样式。 –

1

如果您将两个不同的电子邮件地址作为字符进行比较,您可能需要考虑使用正则表达式将它们拆分以进行比较。一个简单的可以工作为“([\ 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)); 
    } 
} 

希望它有帮助!

相关问题