繁体   English   中英

正则表达式Java模式无法验证?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM