首頁 > 軟體

一文詳解密碼的正規表示式寫法

2023-04-08 06:01:08

密碼的正規表示式如何來寫?

正規表示式:密碼必須至少包含八個字元、至少包含一個數位、小寫和大寫的字母以及特殊字元

我需要一個正規表示式來檢查密碼:

密碼至少包含八個字元、至少包含一個數位、同時包含小寫字母和大寫字母以及特殊字元,例如#?!)

不能是舊密碼或包含使用者名稱,"password""websitename"

這裡是我的驗證表示式,用於限制:八個字元,包括一個大寫字母,一個小寫字母和一個數位或特殊字元。

(?=^.{8,}$)((?=.*d)|(?=.*W+))(?![.n])(?=.*[A-Z])(?=.*[a-z]).*$"

那麼,如何寫一個正則,限制密碼必須是八個字元,包括一個大寫字母,一個特殊字元和字母數位字元?

最佳解決思路

至少八個字元,至少一個字母和一個數位:

"^(?=.*[A-Za-z])(?=.*d)[A-Za-zd]{8,}$"

至少八個字元,至少一個字母,一個數位和一個特殊字元:

"^(?=.*[A-Za-z])(?=.*d)(?=.*[$@$!%*#?&])[A-Za-zd$@$!%*#?&]{8,}$"

最少八個字元,至少一個大寫字母,一個小寫字母和一個數位:

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

至少八個字元,至少一個大寫字母,一個小寫字母,一個數位和一個特殊字元:

"^(?=.*[a-z])(?=.*[A-Z])(?=.*d)(?=.*[$@$!%*?&])[A-Za-zd$@$!%*?&]{8,}"

最少八個最多十個字元,至少一個大寫字母,一個小寫字母,一個數位和一個特殊字元:

"^(?=.*[a-z])(?=.*[A-Z])(?=.*d)(?=.*[$@$!%*?&])[A-Za-zd$@$!%*?&]{8,10}"

次佳解決思路

可以使用這個正規表示式:

^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}$

這個正規表示式將強制執行這些規則:

  • 至少一個大寫字母English letter(?=.*?[A-Z])

  • 至少一個小寫英文字母,(?=.*?[a-z])

  • 至少有一位數位,(?=.*?[0-9])

  • 至少有一個特殊字元,(?=.*?[#?!@$%^&*-])

  • 最小八個長度.{8,}(帶錨)

第三種解決思路

正規表示式沒有AND運運算元,所以編寫匹配有效的密碼的正規表示式相當困難,特別是當有效性被某些東西AND別的東西等定義時...

但是,正規表示式確實有一個OR運運算元,所以只需應用DeMorgan的定理,並編寫一個與無效密碼相匹配的正規表示式:

任何少於八個字元或任何沒有數位或任何沒有大寫字母或任何沒有小寫字母或任何沒有特殊字元的任何字串。

所以:

^(.{0,7}|[^0-9]*|[^A-Z]*|[^a-z]*|[a-zA-Z0-9]*)$

如果能匹配上這個正規表示式的話,這是一個無效的密碼。

第四種思路

對最佳答案的一個小小的改進:由於特殊字元僅限於鍵盤中的特殊字元,因此可用於表達任何特殊字元:

^(?=.*?[A-Z])(?=(.*[a-z]){1,})(?=(.*[d]){1,})(?=(.*[W]){1,})(?!.*s).{8,}$

這個正規表示式將強制執行這些規則:

  • 至少一個大寫英文字母

  • 至少一個小寫英文字母

  • 至少一位數位

  • 至少一個特殊字元

  • 最少八個字元

第五種思路

在我的環境中,按照最佳答案來做,我遇到了一些困難。例如,對字元如;[驗證失敗。我不想白名單列舉我的特殊字元,所以我用[^ws]作為測試 - 只是放置匹配非字元(包括數位)和非空格字元。總而言之,這個做法對我來說比較有效...

  • 至少8字元

  • 至少1數位字元

  • 至少1小寫字母

  • 至少1大寫字母

  • 至少1特殊字元

/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[^ws]).{8,}$/

第六種思路

匯入JavaScript檔案jquery.validate.min.js

就可以使用如下方法:

$.validator.addMethod("pwcheck", function (value) {
    return /[@#$%^&*  _+!]/.test(value) && /[a-z]/.test(value) && /[0-9]/.test(value) && /[A-Z]/.test(value)
});

這個正規表示式可以表達:

  • 至少一張大寫英文字母

  • 至少一個小寫英文字母

  • 至少一位數位

  • 至少一個特殊字元

第七種思路

滿足如下條件:

  • 最少六個字元

  • 至少有一個大寫字元

  • 至少一個小寫字元

  • 至少一個特殊字元

正規表示式:

"/^(?=.*[a-z])(?=.*[A-Z])(?=.*d)(?=.*[$@$!%*?&.])[A-Za-zd$@$!%*?&.]{6, 20}/"

滿足如下條件,且有可選特殊字元:

  • 至少一個特殊字元

  • 至少一個數位

  • 特殊字元是可選的

  • 最少6個字元,最多16個字元

正規表示式:

"/^(?=.*d)(?=.*[a-zA-Z]).{6,20}$/"

如果不需要最小和最大條件,可以刪除.{6, 16}

  • 6是最小字元數限制

  • 20是最大字元限制

  • ?=表示匹配表示式

第八種思路

需要滿足的條件,以及對應的正規表示式:

Conditions: 1] Min 1 uppercase letter.
            2] Min 1 lowercase letter.
            3] Min 1 special character.
            4] Min 1 number.
            5] Min 8 characters.
            6] Max 30 characters.
Regex: /^(?=.*[a-z])(?=.*[A-Z])(?=.*d)(?=.*[#$@!%&*?])[A-Za-zd#$@!%&*?]{8,30}$/    

第九種思路

根據你的需要,下面這個正規表示式應該能正常工作的:

^(?=(.*d){1})(.*S)(?=.*[a-zA-ZS])[0-9a-zA-ZS]{8,}

只需建立一個字串變數,分配模式,並建立一個布林方法,如果模式匹配正確則返回true,否則返回false。

範例:

String pattern = "^(?=(.*d){1})(.*S)(?=.*[a-zA-ZS])[0-9a-zA-ZS]{8,}";
String password_string = "Type the password here"
private boolean isValidPassword(String password_string) {
    return password_string.matches(Constants.passwordPattern);
}

第十種思路

試試這個正規表示式:

^.*(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])[a-zA-Z0-9@#$%^&+=]*$

這個正規表示式對我來說非常完美。

function myFunction() {
    var str = "c1TTTTaTTT@";
    var patt = new RegExp("^.*(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])[a-zA-Z0-9@#$%^&+=]*$");
    var res = patt.test(str);
    console.log("Is regular matches:", res);
}

以上就是一文詳解密碼的正規表示式寫法的詳細內容,更多關於密碼正規表示式寫法的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com