2016-03-04 138 views
0

我必須實現一個關於密碼的規則。規則說新密碼不能包含在舊密碼中。規範說我們考慮至少包含4個連續字符。我正在尋找正則表達式,而不是Java實現。正則表達式來確定一個字符串是否包含在另一個字符中(n個字符)

例子:

OLD_PASSWORD = "Support1234" 
NEW_PASSWORD = "Support567" <-- not allowed 
NEW_PASSWORD = "Support" <-- not allowed 
NEW_PASSWORD = "Suppression" <-- not allowed 
NEW_PASSWORD = "Supersport" <-- not allowed 
NEW_PASSWORD = "123port" <-- not allowed 
NEW_PASSWORD = "1234" <-- not allowed 
NEW_PASSWORD = "123pork" <-- allowed 
NEW_PASSWORD = "pork123" <-- allowed 

這種正則表達式的是一個有點複雜,我想這樣的事情:[^OLD_PASSWORD]{4}但它不是那麼容易。

總結:我的字符串不應該包含一個確定字串的連續4個字符,以通過驗證 請幫助THX :)

+0

切割與可能的塊中的舊密碼,然後使用的indexOf – 2016-03-04 11:24:13

+0

類似的東西可能工作'S'ú2 P 2 P 3 O·R·噸→5→6→7→' –

+0

@RC。我可以,但我不喜歡這種方法..此外,我使用彈簧和我pref使用類 –

回答

1

免得說,密碼的長度總是> 4字符,我們可以採取先從舊通過4個字符,然後每隔4個字符比較它,直到oldpassword長度結束。

Boolean found = false; 
int l = 0, r = 4; 
while(found == false && r <= oldpass.length()){ 
    String tmp = oldpass.substring(l,r); 
    found = newpass.contains(tmp); 
    l++; r++; 
} 

請記住,子字符串從l到r-1。之後,您可以檢查發現的布爾值:)

+0

作爲我在之前的評論中說過,這個解決方案並不滿足我,因爲我在Spring中,並且我會使用一個簡單的模式註釋,這種方式對於進一步的修改更容易。這就是爲什麼我要求一個正則表達式:p –

+0

最後我解決了我的自己也在java中做了這個,有類似的處理,但它仍然不滿足我,但你有點^^ –

0

將新密碼轉換爲Pattern newPasswordPattern =「([1]?[2]?[3]?[p]?[o]?[r]?[t] ?)「; 查找舊的匹配項並檢查其長度。

相關問題