2013-05-28 47 views
3

連續字符我需要這樣做以下密碼驗證在Java中驗證密碼不包含3+從名稱

  • 的長度必須至少8個字符
  • 必須至少包含1號
  • 必須至少包含1個大寫字母
  • 必須包含至少1小寫字母
  • 不能包含您的全名或您的用戶名,連續3個或更多字符(例如,如果你的名字是Will你不可能有密碼Stiller458

我有第4點,我怎麼做最後一個?

目前我有:

String pattern = "^(?=.*[^a-zA-Z])(?=.*[a-z])(?=.*[A-Z])\\S{8,}$"; 
boolean passwordValidation = originalPassword.matches(pattern); 
+6

你有一個正則表達式來做到這一點?最後一點可能是不可能的。 – iamnotmaynard

+1

誰讓你在正則表達式中做到這一點?你應該偷他一個donnut! –

+0

謝謝大家,我一直在與人們爭吵,因爲他們沒有用RegEx來做這件事,他們堅持認爲它是可能的,當我告訴他們給我RegEx他們剛剛走了。 – Vivek

回答

7

爲了您1,2,3,4情況

^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[a-zA-Z\d]{8,}$ 

爲了您的第5的情況下

public boolean isValid(final String userName,final String password) 
{ 
    for(int i=0;(i+2)<userName.length();i++) 
      if(password.indexof(userName.substring(i,i+2))!=-1) 
       return false; 
    return true; 
} 
+0

我得到一個「java.lang.StringIndexOutOfBoundsException:字符串索引超出範圍:8」,任何想法爲什麼? – Vivek

+0

@Vivek oops..check出現編輯現在..而不是使用'userName.length()'我用'password.length()'..小錯誤 – Anirudha

+0

Tnx,我也改變如果(password.indexof(userName。如果(password.indexOf(userName.substring(i,i + 3))!= - 1)包含3個或更多 – Vivek

2

最後一點是不是你用正則表達式做一些事情。循環訪問名稱,然後檢查密碼。

正則表達式擅長模式,不解析。無論如何,你必須使用一個循環來檢查名稱。