电子邮件验证模式未闭合字符类

时间:2016-08-01 22:31:28

标签: java regex validation email

我正在使用我在How to validate an email找到的电子邮件验证模式,除了在电子邮件的第一部分中允许+并且在我的规范中不允许时,它工作正常。原始代码是

public static final String EMAIL_PATTERN = "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@"
        + "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";

protected boolean isInvalidEmail(String email) {
    pattern = Pattern.compile(EMAIL_PATTERN);
    matcher = pattern.matcher(email);
    return !matcher.matches();
}

我以为我可以从+删除"^[_A-Za-z0-9-\\+],但我得到Pattern Syntax Exception: Unclosed Character Class。有人可以告诉我为什么删除+取消课程?谢谢!

2 个答案:

答案 0 :(得分:2)

您必须删除\\+部分。

\\转义\字符。 \+转义+正则表达式运算符。因此\\+分解为\+,这意味着匹配文字+字符。

注意: +正则表达式运算符表示匹配前面一个或多个元素。

答案 1 :(得分:2)

它为您提供Unclosed Character Class的原因是因为仅删除+现在会转义结束方括号,因此它被视为模式的一部分。因此,该类没有匹配的结束方括号。正如Jonny Henly所提到的,解决方案是删除\\+以符合您的规范,但这给出了为什么它是未闭合的答案。