[英]Regex match a strong password with two or more special characters
我需要使用具有以下要求的javascript匹配密碼字段的正則表達式:
我有一個正則表達式來處理大多數情況:
/^.*(?=.{15,})(?=.{2,}\d)(?=.{2,}[a-z])(?=.{2,}[A-Z])(?=.{2,}[\!\@\#\$\%\^\&\*\-]).*$/
這里的問題是符號,它適用於:
P@ssw0rdP@ssw0rd Pssw0rdPssw0rd@@ Pssw0rd@@Pssw0rd
但不是:
@@Pssw0rdPssw0rd
我有一個隨機密碼生成器設置詳盡測試這個,所以任何想法都非常感謝。 謝謝!
/^(?=(?:.*[a-z]){2})(?=(?:.*[A-Z]){2})(?=(?:.*\d){2})(?=(?:.*[!@#$%^&*-]){2}).{15,}$/
你的前瞻是錯誤的。 模式
(?=.{2,}[class])
表示匹配2個或更多字符(無論是什么字符),然后是所需類的1個字符。 這與您指定的“所需類別的2個或更多字符”完全不同。
要正確測試文本中是否包含所需類的字符,請使用
(?=.*[class])
並且由於您要檢查兩次,請重復該模式
(?=.*[class].*[class])
# equivalent to (?=(?:.*[class]){2})
我不確定單個正則表達式是進行此測試的方法。
我個人會實現這樣的事情:(視為偽代碼,我還沒有測試過)
function testPassword(pw) {
var len = pw.length;
if(len < 15) return false;
if(pw.replace(/[a-z]/,'').length > len - 2) return false;
if(pw.replace(/[A-Z]/,'').length > len - 2) return false;
if(pw.replace(/[0-9]/,'').length > len - 2) return false;
if(pw.replace(/[!@#$%^&*-]/,'').length > len - 2) return false;
return true;
}
已經有一些很好的解釋,所以我只是在努力......
/^
(?= .{15} )
(?= (?:.*[[:lower:]]){2} )
(?= (?:.*[[:upper:]]){2} )
(?= (?:.*[[:digit:]]){2} )
(?= (?:.*[!@#$%^&*-]){2} )
/x
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.