简单的邮件验证

时间:2011-11-24 16:05:28

标签: java regex email-validation

  

可能重复:
  Verify email in Java

我正在尝试进行非常简单的电子邮件验证。但问题是,当我尝试类似tom@@@@gmail.com之类的东西时,它会返回true。

以下是代码:

public static boolean validateEmail(String email){
        boolean isValidEmail = false;
       // Input the string for validation
       // String email = "xyz@.com";
       // Set the email pattern string
       Pattern p = Pattern.compile(".+@.+\\.[a-z]+");

       // Match the given string with the pattern
       Matcher m = p.matcher(email);

       // check whether match is found
       boolean matchFound = m.matches();

       StringTokenizer st = new StringTokenizer(email, ".");
       String lastToken = null;
       while (st.hasMoreTokens()) {
          lastToken = st.nextToken();
       }

       if (matchFound && lastToken.length() >= 2
          && email.length() - 1 != lastToken.length()) {


          // validate the country code
          isValidEmail = true;
       }
       else isValidEmail = false;

    return isValidEmail;
}

请帮忙。提前谢谢。

5 个答案:

答案 0 :(得分:6)

.+@.+会匹配任何内容,包括@,然后是@,后跟任何内容,包括@。请改用[^@]+@[^@]+

或停止重新发明轮子,抓住Apache Commons并使用其EmailValidator

答案 1 :(得分:5)

您可以使用Javamail API中的类javax.mail.internet.InternetAddress(有validate方法)

答案 2 :(得分:2)

这是许多图书馆中解决的问题。不要重新实现自己的。

在regexp中获得100%的正确性要比你想象的要困难得多。

答案 3 :(得分:2)

This site表示以下模式与RFC 5322匹配,涵盖了今天使用的大多数电子邮件地址:

Pattern p = Pattern.compile("[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?", Pattern.CASE_INSENSITIVE);

我做了一些快速测试。

考虑将编译后的模式存储在常量中以提高性能。

答案 4 :(得分:1)

应为Pattern p = Pattern.compile(".+@{1}+\\.[a-z]+");

<强> BUT:

我上面的答案与@larsmans的答案完全相同,因为:

此(评论)me@demo.com 是有效的电子邮件。

您必须阅读RFC:http://tools.ietf.org/html/rfc5322

事实上,使用一个好的库,如apache-commons。