Java 电子邮件验证模式未关闭字符类
我使用的是我在上找到的电子邮件验证模式,它工作正常,只是它允许在电子邮件的第一部分使用Java 电子邮件验证模式未关闭字符类,java,regex,validation,email,Java,Regex,Validation,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(Stri
+
,这在我的规范中是不允许的。原始代码是
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();
}
我以为我可以从
“^[\u A-Za-z0-9-\\+]
中删除+
,但是我得到了一个模式语法异常:未关闭的字符类
。有人能告诉我为什么删除+
会打开类吗?谢谢!你必须删除\+
部分
\\
转义\
字符。\+
转义+
正则表达式运算符。因此\+
分解为\+
,这意味着匹配文本+
字符
注意:正则表达式操作符表示匹配前面的一个或多个元素。您必须删除
\\+
部分
\\
转义\
字符。\+
转义+
正则表达式运算符。因此\+
分解为\+
,这意味着匹配文本+
字符
注意:正则表达式操作符的意思是匹配前面的一个或多个元素。它之所以给您提供
未关闭字符类
,是因为现在只有删除+
才能转义关闭方括号,因此它被视为模式的一部分。因此,该类没有匹配的字符关闭方括号。正如Jonny Henly提到的,解决方案是删除\\+
以与您的规范保持一致,但这给出了为什么它未关闭的答案。它给您未关闭字符类的原因是因为现在只有删除+
才能转义关闭方括号,因此它被认为是正确的模式的一部分。因此,该类没有匹配的结束方括号。正如Jonny Henly提到的,解决方案是删除\\+
以与您的规范保持一致,但这给出了为什么它未关闭的答案。但是奇怪的是,他们将\\+
放在最后的-
之后,不是吗?-
只有在字符类的开头或结尾时才有它的文字表示,否则就充当范围运算符。因此,此正则表达式的源似乎不可信。@AndrewCheong我认为这也很奇怪,但不会显示任何错误,并且它匹配有效字符串,如示例-@email.com
。尽管,如果连字符是不在开头或结尾,则应转义(\-
)。但奇怪的是,他们把\\+
放在最后一个-
之后,不是吗?-
只有在字符类的开头或结尾时才有它的文字表示,否则就充当了范围运算符。所以这个正则表达式的源似乎不可信。@AndrewCheong我认为这也很奇怪,但不可信显示任何错误并匹配有效字符串,如示例-@email.com
。但是,如果连字符不在开头或结尾,则应将其转义(\-
)。这将给出未关闭原因的答案-+1这将给出未关闭原因的答案-+1