[英]Regular expression java pattern doesn't validate?
正则表达式"String regex = "[0-9a-z]+@[0-9a-z]+.+[0-9a-z]";"
,用于测试电子邮件验证。 基本上,我会尽量使该电子邮件匹配此模式,前提是该电子邮件必须以一串字母数字字符,后跟1 @符号,另一串字母数字字符,后跟1和最后一个a开头。一串字母数字字符。 失败的是,当我在最后一个。之后输入没有字母数字字符串的电子邮件时,该程序仍将与正则表达式字符串匹配。 我该如何做,以便在。之后必须有另一个字母数字字符串? 整个代码是:
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");
}
}
}
一个无法逃脱的 .
表达式中的代表任何字符。 您需要使用\\\\.
或[.]
以匹配文字点。
String regex = "[0-9a-z]+@[0-9a-z]+[.]+[0-9a-z]";
点后的+
表示“一个或多个在先表达式”。 上面的“优先表达”是一个点。 要匹配电子邮件域名中的多个段,您需要添加括号:
String regex = "[0-9a-z]+@([0-9a-z]+[.])+[0-9a-z]+";
稍好一点的正则表达式将包括行^的开始和行$的锚。
否则,它将只需要匹配字符串中有效电子邮件的单个实例,它将通过。 另外,您可以通过添加{2,4}来将其限制为2到4个字符,而不用加号表示1个或更多。 没有这些就好
myemail @ gmail.com @ thisIsOdd.helloworld.anythingelse
错误地有效。
String regex = "^[0-9a-z]+@([0-9a-z]+[.])+[0-9a-z]{2,4}$";
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.