Java文本匹配电子邮件

Java文本匹配电子邮件,java,validation,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";

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

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

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

此正则表达式相当完整,在速度、复杂性和有效性之间取得了合理的平衡:

[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
IMHO,最好的regex学习网站是,它也有(我从哪里得到这个regex)

你可以试试这个:

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,})$

如果您需要更多解释,请告诉我。

使用正则表达式精确验证电子邮件地址是不实际的。电子邮件地址的格式极其复杂,如该页面链接的RFC中非正式描述的和更正式的描述

正如你从其他人给出的答案中看到的,任何试图处理复杂事物的正则表达式都是人类无法理解的;所以你永远不能确定它是正确的

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

你应该考虑一下你通过验证想要实现什么。您希望排除哪些值,以及这样做的成本是多少?你真的想排除用户的错误,最有可能是打字错误;但是绝大多数(可能的)打字错误都会产生一个有效的电子邮件地址,所以你不会发现这些错误


验证电子邮件地址的唯一实用方法是向其发送电子邮件。如果你真的需要一个电子邮件地址为你的用户,这是唯一的方式,你可以确保你有一个有效的。< / P>我只是想学习正则表达式,电子邮件验证只是一个例子,你可能想考虑重新措辞你的问题,然后。