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>我只是想学习正则表达式,电子邮件验证只是一个例子,你可能想考虑重新措辞你的问题,然后。