亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

正則表達式以強制執行復雜密碼,匹配4個規則中的3個

正則表達式以強制執行復雜密碼,匹配4個規則中的3個

小怪獸愛吃肉 2019-08-08 16:53:55
正則表達式以強制執行復雜密碼,匹配4個規則中的3個我有以下標準為密碼創建符合以下規則的正則表達式:密碼長度必須為8個字符(我可以這樣做:-))。然后,密碼必須包含以下4條規則中至少3條的字符:大寫小寫數字非字母數字我可以使表達式與所有這些規則匹配,并使用以下表達式:/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.[\W]).{8,}$/但我正在努力解決如何以這樣的方式做到這一點,它只需要解決4條規則中的任何3條。任何人都可以幫我解決這個問題嗎?
查看完整描述

3 回答

?
侃侃無極

TA貢獻2051條經驗 獲得超10個贊

然后不要使用一個正則表達式進行檢查。


if (password.length < 8)

  alert("bad password");

var hasUpperCase = /[A-Z]/.test(password);

var hasLowerCase = /[a-z]/.test(password);

var hasNumbers = /\d/.test(password);

var hasNonalphas = /\W/.test(password);

if (hasUpperCase + hasLowerCase + hasNumbers + hasNonalphas < 3)

  alert("bad password");

如果必須使用單個正則表達式:


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

此正則表達式未針對效率進行優化。它是通過A·B·C + A·B·D + A·C·D + B·C·D一些因子分解構建的。分解:


^

(?:

    (?=.*[a-z])       # 1. there is a lower-case letter ahead,

    (?:               #    and

        (?=.*[A-Z])   #     1.a.i) there is also an upper-case letter, and

        (?=.*[\d\W])  #     1.a.ii) a number (\d) or symbol (\W),

    |                 #    or

        (?=.*\W)      #     1.b.i) there is a symbol, and

        (?=.*\d)      #     1.b.ii) a number ahead

    )

|                     # OR

    (?=.*\W)          # 2.a) there is a symbol, and

    (?=.*[A-Z])       # 2.b) an upper-case letter, and

    (?=.*\d)          # 2.c) a number ahead.

)

.{8,}                 # the password must be at least 8 characters long.

$


查看完整回答
反對 回復 2019-08-08
?
慕后森

TA貢獻1802條經驗 獲得超5個贊

可以編寫一個非常復雜的正則表達式來做到這一點。相反,我建議寫四個不同的正則表達式,每個規則一個,并逐個測試它們,計算它們中有多少匹配。如果有四分之三,請接受密碼。


查看完整回答
反對 回復 2019-08-08
?
蠱毒傳說

TA貢獻1895條經驗 獲得超3個贊

您可以使用以下正則表達式:

(^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).*$)?(^(?=.*\d)(?=.*[a-z])(?=.*[@#$%^&+=]).*$)?(^(?=.*\d)(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?(^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$)?

密碼最小長度為8,最大長度為32,您可以使用以下正則表達式:

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



查看完整回答
反對 回復 2019-08-08
  • 3 回答
  • 0 關注
  • 1319 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號