簡體   English   中英

Java String.matches()正則表達式

[英]Java String.matches() regular expressions

我正在嘗試使用matches()函數檢查某些情況下用戶輸入的密碼

“包含六個字母數字字符,至少一個字母和一個數字”

這是我目前檢查字母數字字符的條件

pword.matches("([[a-zA-Z]&&0-9])*")

不幸的是,在使用“ rrrrZZ1”作為密碼的示例中,此條件仍然返回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/

也將此書簽添加為書簽:

http://www.regular-expressions.info/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM