我使用的电子邮件验证模式是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
。有人可以告诉我为什么取消+
解锁班?谢谢!
这很奇怪,他们把'\\ +'放在最后的'-'后面,不是吗? '-'只在字符类的开始或结尾处有其字面表示,否则作为范围运算符。所以这个正则表达式的来源似乎是不可信的。 –
@AndrewCheong我认为这很奇怪,但[前5名正则表达式测试人员](https://www.google.com/search?client=ubuntu&channel=fs&q=java+regex+tester&ie=utf-8&oe=utf- 8)不显示任何错误,并且它匹配有效的字符串,例如'example- @ email.com'。虽然,如果连字符不在开头或结尾,那么它应该被转义('\ -')。 –