Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 电子邮件验证模式未关闭字符类_Java_Regex_Validation_Email - Fatal编程技术网

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