正则表达式java模式不验证?

时间:2013-02-03 17:29:16

标签: java regex

正则表达式"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");
        }
    }
}

2 个答案:

答案 0 :(得分:4)

表达式中的未转义 .代表任何字符。您需要使用\\.[.]来匹配文字点。

String regex = "[0-9a-z]+@[0-9a-z]+[.]+[0-9a-z]";

点后面的+表示“先前表达式的一次或多次出现”。上面,“先前表达式”是单个点。要匹配电子邮件的域地址中的多个段,您需要添加括号:

String regex = "[0-9a-z]+@([0-9a-z]+[.])+[0-9a-z]+";

答案 1 :(得分:1)

一个稍微好一点的正则表达式包括 ^ 行的开头和 $ 行的结尾。

否则,它只需要匹配字符串中有效电子邮件的单个实例,它就会通过。此外,您可以通过添加{2,4}将其限制为2到4个字符,而不是加号来表示1或更多。没有这些就像

  

myemail @ gmail.com @ thisIsOdd.helloworld.anythingelse

将错误地生效。

String regex = "^[0-9a-z]+@([0-9a-z]+[.])+[0-9a-z]{2,4}$";