java - 电子邮件验证模式 Unclosed Character Class

标签 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异常:未关闭的字符类。有人能告诉我为什么删除 + 会打开该类吗?谢谢!

最佳答案

您必须删除 \\+ 部分。

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

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

关于java - 电子邮件验证模式 Unclosed Character Class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38709100/

相关文章:

java - 为什么当我尝试覆盖静态方法时编译器不提示?

java - 我可以使用哪种数据库技术来持久化对象? (不需要我负责将对象映射到表并返回的东西)?

gwt - 使用 Google Web Toolkit 进行表单验证?

JavaScript,如果提交为真(使用 colorbox 和 jquery 验证)

javascript - 页面验证: Inline Javascript

java - 使用省略的 varargs 参数解析 Java 方法

java - PHP 从数据库中检索单个字符串

Python正则表达式问题

java - Scala:查找不以特定字符串结尾的最大字符串的正则表达式

mysql - RegExp 用于搜索包含子字符串 '123' 但不包含子字符串 '234' 的字符串