2010-12-08 69 views
0

我正在使用以下正則表達式我的java代碼。使用正則表達式進行密碼驗證

^.*(?=.{6,20})(?=.*[a-z].*[a-z])(?=.*[A-Z])(?=.*[0-9]).*$ 

當我試圖使用相同的XML作爲

^.\*(\?=.{6,20})(\?=.\*[a-z].\*[a-z])(\?=.\*[A-Z])(\?=.\*[0-9]).\*$ 

這是行不通的。它顯示如下例外。

java.lang.IllegalArgumentException異常: CVC圖案有效:值 'narendra1A' 不是小面有效的相對於 圖案 「^ *(\ = {6,20}?)。 (\?=。* [az]。* [az])(\?=。* [AZ])(\?=。* [0-9])。* $'爲 '#AnonType_passwordcreateUser'。

任何人都可以在這方面提供幫助。

感謝,

納倫德拉

+0

與這個問題無關,但應該在`^`後面刪除第一個`。*`。這是沒有必要的,並使你的正則表達式非常低效。另外,如果您認爲您將密碼長度限制爲6-20個字符,則不是。一個100個字符的字符串會傳遞這個正則表達式。 – 2010-12-08 11:01:42

+1

爲什麼有20個字符的上限? – Gumbo 2010-12-08 11:02:03

回答

2

這並不直接回答你的問題,但它可能是一個更好的選擇一個比你試圖做密碼質量檢查與正則表達式。

vt-password庫是一個很好的Java庫,它實現了基於規則的密碼質量檢查。除了計算字符/字符類別之外,它還可以執行諸如檢查字典,檢查以前使用的密碼,檢查重複字符等。

(如果您使用的是Spring,配置密碼規則非常簡單在Spring XML文件接線的對象。這允許您調整規則,而不改變你的代碼。)

0

密碼正則表達式模式

((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%]).{6,20}) 

說明

(   # Start of group 
    (?=.*\d)  # must contains one digit from 0-9 
    (?=.*[a-z]) # must contains one lowercase characters 
    (?=.*[A-Z]) # must contains one uppercase characters 
    (?=.*[@#$%]) # must contains one special symbols in the list "@#$%" 
    .   #  match anything with previous condition checking 
     {6,20} #  length at least 6 characters and maximum of 20 
)   # End of group 
0

您的模式使用XML文檔中禁止的字符。 爲了簡單起見,請將密碼放入CDATA中。