2012-04-01 64 views
1

我有一些代碼,目前檢查最小和最大lentgh。我還想要大寫,小寫,特殊字符和數字。有什麼建議要添加到這個或我可以找到一些例子?我一直在谷歌搜索,通過這個論壇,一直試圖添加額外的密碼要求,並沒有成功。密碼驗證 - 添加額外的需求

這是我想要的。

至少8個字符長度 至少小寫字母 不超過20個字符,一個大寫 至少一個從特殊字符:!@#$%^ & *()〜` - = _ + [] {} |:「」,/ <> 至少一個數字[0-9]字符 無法比擬的帳戶登錄名或電子郵件地址

我當前的密碼驗證碼

public static final int MIN_PASSWORD_LENGTH = 8; 
public static final int MAX_PASSWORD_LENGTH = 20; 

public static boolean isAcceptablePassword(String password) 
{ 
    if(TextUtils.isEmpty(password)) 
     return false; 

    int len = password.length(); 

    if(len < MIN_PASSWORD_LENGTH || len > MAX_PASSWORD_LENGTH) 
     return false; 

    for(int i = 0; i < len; i++) 
    { 
     char c = password.charAt(i); 
     if (Character.isWhitespace(c)) 
      return false; 
    } 

    return true; 
} 
+3

那麼,爲什麼你不只是實現你的要求? – 2012-04-01 06:34:05

+0

[密碼強度檢查庫]的可能重複(http://stackoverflow.com/questions/3200292/password-strength-checking-library) – 2012-04-01 06:36:20

+0

?正如我已經提到的,我嘗試過沒有成功。我如何實現?我是一名網頁設計師,而不是一名java程序員,但我正在嘗試爲新的需求編輯一些代碼。 – rick 2012-04-01 06:50:23

回答

4

當你分析String數據,您應該清除左側和右側的空格。這是由Strimg#trim功能這樣做:

password = password.trim(); 

要analize字符串的每一個字符,你可以將其轉換爲字符數組,所以它會更容易滿足您的要求:

char[] arrPassword = password.toCharArray(); 

現在您可以評估使用這些功能的字符:Character#isUpperCase,Character#isLowerCase,Character#isDigit

最後但並非最不重要,你可以有一個字符串,你需要檢查特殊字符,並檢查你正在評估的實際字符是否在該字符串內。這可以通過使用String#indexOfString#valueOf來實現,這可以將字符串轉換爲字符串類型。

這裏是所有這些解釋代碼示例:

public static final String SPECIAL_CHARACTERS = "[email protected]#$%^&*()~`-=_+[]{}|:\";',./<>?"; 
public static final int MIN_PASSWORD_LENGTH = 8; 
public static final int MAX_PASSWORD_LENGTH = 20; 

public static boolean isAcceptablePassword(String password) { 
    if (TextUtils.isEmpty(password)) { 
     System.out.println("empty string."); 
     return false; 
    } 
    password = password.trim(); 
    int len = password.length(); 
    if(len < MIN_PASSWORD_LENGTH || len > MAX_PASSWORD_LENGTH) { 
     System.out.println("wrong size, it must have at least 8 characters and less than 20."); 
     return false; 
    } 
    char[] aC = password.toCharArray(); 
    for(char c : aC) { 
     if (Character.isUpperCase(c)) { 
      System.out.println(c + " is uppercase."); 
     } else 
     if (Character.isLowerCase(c)) { 
      System.out.println(c + " is lowercase."); 
     } else 
     if (Character.isDigit(c)) { 
      System.out.println(c + " is digit."); 
     } else 
     if (SPECIAL_CHARACTERS.indexOf(String.valueOf(c)) >= 0) { 
      System.out.println(c + " is valid symbol."); 
     } else { 
      System.out.println(c + " is an invalid character in the password."); 
      return false; 
     } 
    } 
    return true; 
} 

System.out.println(c + " is an invalid character in the password.");句話只是爲了檢查分析實際字符的結果。

+0

什麼是空的條件? – 2016-12-06 07:48:37

+0

@ArpitPatel修復 – 2016-12-06 12:49:54

0

斯蒂芬是正確的一點搜索你會發現你的答案很容易在這裏。但斯蒂芬提到的主題是使用第三方庫。

如果你想自己實現這個功能,那麼在開始for循環之前用false來初始化4個你的需求的布爾值。循環檢查所有四個要求,直到一個成立。將相應的布爾值設置爲true。

如何檢查4個要求:

  • 你已經實現的長度REQ。
  • Character(yourChar).isLowerCase()
  • Character(yourChar)。isUpperCase()
  • 特殊字符:在這裏看到:Java String Special character replacement - 你可以選擇一個類似的方法

爲4個布爾迴路檢測後,並作出相應的反應。

2

一些好的舊正則表達式如何?這似乎工作正常,雖然可能在逃避特殊字符檢查滑倒

Pattern[] checks = { 
     Pattern.compile("[[email protected]#\\$%^&*()~`\\-=_+\\[\\]{}|:\\\";',\\./<>?]"), 
     Pattern.compile("\\d+"), 
     Pattern.compile("[A-Z]+"), 
     Pattern.compile("[a-z]+"), 
     Pattern.compile("^.{8,20}$") }; 

for (String test : new String[] { "password", "Password1", 
     "Password1&", "toolongtoolongtoolong" }) { 
    boolean ok = true; 
    for (Pattern check : checks) { 
     ok = ok && check.matcher(test).find(); 
    } 
    System.out.println(test + " " + ok); 
}