2011-04-15 101 views
1

我正在尝试查找一个简单的方法来检查用户的输入是否符合电子邮件地址的几个条件。我已阅读了关于此主题的许多主题,并且大多数人似乎也想验证电子邮件地址。我并没有试图建立一些超级电子邮件地址验证器/检查器。我试图建立一个检查这些东西的方法:对Java中电子邮件的非混淆性简单验证字符串

  1. 用户输入的字符串包含'@'符号。
  2. '@'符号前至少有两个字符。
  3. 有一个'。'在符号后面只有三个字符。域名可以根据需要尽可能长,但字符串必须以“._ _ _”结尾。如“.com”或“.net”...

据我所知,这不是一个包罗万象的电子邮件地址检查器。这不是我想要的。我只想要一件简单的事情。我知道这可能是一个例行的问题,但即使在阅读了验证电子邮件地址的所有严重疯狂的方法之后,我也无法弄清楚。

这是我到目前为止的代码:(别担心,我已经知道这是很可悲的....)

public static void checkEmail() 
{ 
    validEmail(emailAddresses); 
    if(validEmail(emailAddresses)) 
    { 

    } 
} 

public static boolean validEmail(String email) { 
    return email.matches("[A-Z0-9._%+-][A-Z0-9._%+-][email protected][A-Z0-9.-]+\\.[A-Z]{3}"); 
} 
+0

在这种情况下很难说什么是简单的。您发布了一些案例(包含@,之前/之后包含另一个字符)。我会阅读规范并制定一个完整的正则表达式来验证它。 – khachik 2011-04-15 20:10:08

+0

只需注意术语:您不想检查电子邮件,想检查*电子邮件地址*。这是不一样的。 – 2011-04-15 20:34:59

+0

另一个说明:有顶级域名有更多('博物馆,''航空'),并且少于两个('de','us'等 - 所有国家代码顶级域名,事实上)字母。 (而且我的大部分电子邮件地址都以'.de'结尾。) – 2011-04-15 20:39:15

回答

2

不完美,但完成工作。

static boolean validEmail(String email) { 
    // editing to make requirements listed 
    // return email.matches("[A-Z0-9._%+-][email protected][A-Z0-9.-]+\\.[A-Z]{2,4}"); 
    return email.matches("[A-Z0-9._%+-][A-Z0-9._%+-][email protected][A-Z0-9.-]+\\.[A-Z]{3}"); 
} 

void checkEmails() { 
    for(String email : emailAddresses) { 
     if(validEmail(email)) { 
      // it's a good email - do something good with it 
     } 
     else { 
      // it's a bad email - do something... bad to it? sounds dirty... 
     } 
    } 
} 
+0

也许你可以加小写? – rocky3000 2011-04-15 20:15:30

+0

我可以。我可以添加很多东西。将每个'A-Z'改变为'A-Za-Z'(可能是我不知道的一些快捷方式可以做得更好),这会很容易。但是,OP想要简单而简单。 – corsiKa 2011-04-15 20:17:53

+0

@glowcoder感谢您的帮助。我试图理解布尔代码的email.matches部分,我对如何将它合并到我的代码中有点困惑。我已经将布尔代码作为单独的方法输入到我的代码中。现在我正在尝试编写“if”语句。我编辑了原始问题。 – Michael 2011-04-15 20:34:13

12

javax.mail包提供了一个类只是这样的:InternetAddress。使用this constructor可让您执行RFC822合规性。

+1

不得不承认我比我更喜欢这个。 – corsiKa 2011-04-15 20:10:50

0
int indexOfAt = email.indexOf('@'); 
// first check : 
if (indexOfAt < 0) { 
    // error 
} 

// second check : 
if (indexOfAt < 2) { 
    // error 
} 

// third check : 
int indexOfLastDot = email.lastIndexOf('.'); 
if (indexOfLastDot < indexOfAt || indexOfLastDot != (email.length() - 4)) { 
    // error 
} 

http://download.oracle.com/javase/6/docs/api/java/lang/String.html为String方法的文档。

+0

这允许不符合的'test @ foo @ bar.com'。它也不适用于不允许的字符,比如',<> \''等等。 – corsiKa 2011-04-15 20:19:42