繁体   English   中英

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

[英]Email validation pattern Unclosed Character Class

我使用的是在如何验证电子邮件中找到的电子邮件验证模式,除了它在电子邮件的第一部分允许+且我的规范中不允许使用之外,它工作正常。 原始代码是

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 。有人可以告诉我为什么删除+取消该类吗?谢谢!

您必须删除\\\\+部分。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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