我使用的電子郵件驗證模式是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'。雖然,如果連字符不在開頭或結尾,那麼它應該被轉義('\ -')。 –