2011-12-25 37 views
1

我在Java中使用正則表達式來檢查密碼字段的輸入。以下是用於檢查密碼的代碼:爲什麼輸入必須接受的字符時會產生錯誤?

final Pattern check = Pattern.compile("^[a-z0-9A-Z!$%*()-_[]{};:@#<>,./?\\|]+$"); 

if (!check.matcher(password).matches()) { 
    errors.put("password", "Invalid input"); 
} 

在i提交包含符號等的輸入,例如%,正在生成以下情況例外:

例外

java.util中.regex.PatternSyntaxException:未關閉的字符類,在 附近索引37^[a-z0-9A-Z!$%*()-_ [] {};:@#<>,。/?\ |] + $ ^

我已經在這個相同的代碼中使用了其他正則表達式,它們工作正常......只有這部分給我帶來麻煩。

你們中的任何一個人是否可能知道導致此錯誤的原因?

感謝您的幫助提前!

回答

2

你的性格類有兩個問題:

  • 你不要逃避它的]
  • -放置使得曖昧。

更重要的是,Java還需要你逃避[(其他正則表達式引擎不會要求):

你應該寫一個這樣的:

final Pattern check = Pattern.compile("^[-a-z0-9A-Z!$%*()_\\[\\]{};:@#<>,./?\\\\|]+$"); 
+0

'''是邏輯的,否則正則表達式在哪裏知道字符類的結束? ;) – fge 2011-12-25 21:45:00

1

我想你應該逃避一些這些字符的?至少括號,因爲你正在使用它們來開始你的角色類。

相關問題