2

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

2 回答 2

4

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

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

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

String regex = "[0-9a-z]+@([0-9a-z]+[.])+[0-9a-z]+";
于 2013-02-03T17:30:43.073 回答
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}$";

于 2013-02-03T18:04:32.940 回答