Java文本匹配电子邮件

时间:2012-02-08 08:29:44

标签: java validation

我是正则表达式的新手,但我想学习。以下是电子邮件验证的示例:

public class x 
{ 
    public static void main(String[] args) 
    { 
        String pattern = "[a-zA-Z0-9]+[a-zA-Z0-9._]*[a-zA-Z0-9]*+@[a-zA-Z0-9]*[.]([a-z][a-z]|[a-z][a-z][a-z])";
        String text    = "g@gmail.co";
        System.out.println(text.matches(pattern));
    }
}

我试着写电子邮件验证。哪里我错了,我可以优化什么?感谢。

3 个答案:

答案 0 :(得分:1)

这个正则表达式相当完整,速度,复杂性和有效性之间的合理平衡:

[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[A-Z]{2}|com|org|net|edu|gov|mil|biz|info|mobi|name|aero|asia|jobs|museum)\b

恕我直言,最好的正则表达式学习网站是regular-expresssions.info,它也有a discussion on email validation(我得到了这个正则表达式)

答案 1 :(得分:1)

使用正则表达式准确验证电子邮件地址是不切实际的。电子邮件地址的格式非常复杂,正如在Wikipedia上非正式地描述的那样,更正式地在从该页面链接的RFC中。

正如你从其他人给出的答案中看到的那样,任何试图解决复杂事物的正则表达对人类来说都是不可理解的;所以你永远不能确定它是否正确。

这不仅仅是一个理论问题。任何复杂的电子邮件验证代码都会遇到无法快速处理的案例。作为一个密切相关的领域的例子,我经常不得不在与计算机交谈时撒谎,因为它有一个连字符。

您应该考虑通过验证尝试实现的目标。您想排除哪些价值,这样做的成本是多少?你真的想要排除用户方面的错误,很可能是拼写错误;但绝大多数(可能的)拼写错误都会产生有效的电子邮件地址,所以你不会抓住这些。

验证电子邮件地址的唯一实用方法是向其发送电子邮件。如果您确实需要为用户提供电子邮件地址,那么这是确保您拥有有效电子邮件地址的唯一方式。

答案 2 :(得分:0)

你可以试试这个:

public class EmailValidator{

      private Pattern pattern;
      private Matcher matcher;

      private static final String EMAIL_PATTERN = 
                   "^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@
                   [A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";

      public EmailValidator(){
          pattern = Pattern.compile(EMAIL_PATTERN);
      }

      /**
       * Validate hex with regular expression
       * @param hex hex for validation
       * @return true valid hex, false invalid hex
       */
      public boolean validate(final String hex){

          matcher = pattern.matcher(hex);
          return matcher.matches();

      }
}

模式必须是:

^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$

如果你想要更多解释,请告诉我。