我試圖用火柴()函數來對某些條件的Java String.matches()的正則表達式
「包含六個字母數字字符,至少一個字母和一個數字」
檢查用戶輸入的密碼這裏是我的檢查字母數字字符使用「rrrrZZ1」
pword.matches("([[a-zA-Z]&&0-9])*")
不幸例如作爲密碼當前條件此條件仍然返回false
什麼是正確的正則表達式?謝謝
我試圖用火柴()函數來對某些條件的Java String.matches()的正則表達式
「包含六個字母數字字符,至少一個字母和一個數字」
檢查用戶輸入的密碼這裏是我的檢查字母數字字符使用「rrrrZZ1」
pword.matches("([[a-zA-Z]&&0-9])*")
不幸例如作爲密碼當前條件此條件仍然返回false
什麼是正確的正則表達式?謝謝
這裏的其他人可能會證明我錯了,但如果沒有過於複雜的正則表達式,這將會非常困難。我只是使用非正則表達式方法。爲每個條件設置3個布爾值,在每個條件滿足時遍歷字符並設置每個布爾值,如果所有3個布爾值不等於true,則驗證失敗。
你可以用這樣簡單的東西:
public boolean validatePassword(String password){
if(password.length() < 6){
return false;
}
boolean foundLetter = false;
boolean foundNumber = false;
for(int i=0; i < password.length(); i++){
char c = password.charAt(i);
if(Character.isLetter(c)){
foundLetter = true;
}else if(Character.isDigit(c)){
foundNumber = true;
}else{
// Isn't alpha-numeric.
return false;
}
}
return foundLetter && foundNumber;
}
我ziesemer同意 - 使用的,而不是填鴨式成正則表達式一個validatePassword()方法。
開發人員維護的可讀性要高得多。
如果您確實想要沿着正則表達式路徑走,可以使用零寬度正向預覽來實現。
包含六個字符,至少一個字母和一個數字:
^.*(?=.{6,})(?=.*[a-zA-Z]).*$
我改變你的六alphanumeric characters
只是characters
。 支持更復雜的密碼:)
大後的題目
http://www.zorched.net/2009/05/08/password-strength-validation-with-regular-expressions/
收藏這一個了:
我猜'validatePassword()'方法也會比正常表達式模式要編譯的更好。 :-)如果一個正則表達式真的可以正常工作,那麼它可以作爲一個可替換的屬性使用 - I.E.將所需的模式作爲一個正則表達式存儲在屬性文件中。我只是不確定這將是多麼有用的密碼驗證規則。 – ziesemer
方法()的另一個好處是,如果找到了肯定的結果,它可以提前離開。使用正則表達式,每次都會編譯和匹配整個模式。例如。如果你必須有一個len> 6的通行證,並且你給了它5個字符,你可以在一次簡單的長度檢查之後保釋,比正則表達式編譯要快得多 –
嘗試[A-ZA-Z0-9] { 6,}。 –