【发布时间】:2013-02-03 17:29:16
【问题描述】:
正则表达式 "String regex = "[0-9a-z]+@[0-9a-z]+.+[0-9a-z]";" 用于测试电子邮件验证。基本上,我试图做到这一点,以便电子邮件仅以一串字母数字字符开头,然后是 1 @ 符号,然后是另一个字母数字字符字符串,然后是 1 .,最后是一个字母数字字符的字符串。失败的是,当我在最后一个 . 之后输入没有字母数字字符串的电子邮件时,该程序仍将与正则表达式字符串匹配。我该如何做到,以便在 . 之后必须有另一个字母数字字符串?整个代码是:
import java.util.Scanner;
import java.util.regex.*;
public class Regex
{
public static void main (String[]args){
Scanner input = new Scanner(System.in);
System.out.println("Please enter your Email");
String mail = input.nextLine();
String regex = "[0-9a-z]+@[0-9a-z]+.+[0-9a-z]";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(mail);
if(m.find()) {
System.out.println("VALID");
} else {
System.out.println("INVALD");
}
}
}
【问题讨论】:
-
.+ 会给你“至少一个任意字符”。我认为您的意思是在最后一个括号后加上“+”。
-
对于这类问题,regexper.com是我的首选工具。
-
您的电子邮件地址正则表达式非常严格。例如,英国电子邮件地址 @example.co.uk 不会验证。电子邮件地址也不会。或 + 在用户部分。查看blog.gerv.net/2011/05/html5_email_address_regexp 以获得更好的(仍然不是完整的规格,但更接近。
-
您不应使用正则表达式来验证电子邮件地址。