我有,我想申請一個密碼正則表達式模式:如何指定哪些條件不匹配?
/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[[:punct:]])./
有4個捕捉組。我希望能夠知道哪些捕獲組與提供的字符串不匹配,因此我可以向用戶提供具體的反饋。
例如: abcd43 - >第1個&第3組爲true;第二和第四假 (所以我可以自定義一個錯誤:「您的密碼必須包含至少一個大寫字母和標點符號。」)
我有,我想申請一個密碼正則表達式模式:如何指定哪些條件不匹配?
/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[[:punct:]])./
有4個捕捉組。我希望能夠知道哪些捕獲組與提供的字符串不匹配,因此我可以向用戶提供具體的反饋。
例如: abcd43 - >第1個&第3組爲true;第二和第四假 (所以我可以自定義一個錯誤:「您的密碼必須包含至少一個大寫字母和標點符號。」)
最簡單的方法是分別檢查四個組。
您可以使用簡單的東西如:
if(!lowerCase(pass))
print "No lower case letters"
else if(!upperCase(pass))
print "No upper"
else if(!digits(pass))
print "No digits"
etc...
只需設置一個varibale作爲匹配組,檢查各組:
var pattern =/...../ //whatever
var ma = 'my string'.match(pattern);
if (!ma)
console.log('No match');
else{
console.log(ma[0]) // first group.
console.log(m[1]); // second group;
}
現在只需檢查每個組都有一個值或不是,每個索引代表相應的圓括號:
if (!m[0]){
alert('your password does not match first parenthesis');
}
Javascript does not在正則表達式中直接支持命名捕獲組。那麼最好的辦法就是簡單地檢查組,並將數字映射到一個條件,或許通過一個數組。所以你可能會有1 - >「小寫」,2 - >「大寫」等。
然後只是建立一個相應的失敗消息,並顯示該消息。
"lower case" -> "Passwords must contain at least one lower case letter"
"upper case" -> "Passwords must contain at least one upper case letter."
現在,請說,請不要這樣做。我使用密碼生成器和一個密碼存儲器來登錄。如果您要施加更多的限制而不僅限於長度,請將它們全部發布出去。不要嘗試「定製」錯誤消息,告訴我我錯過了什麼。 (而且,實際上,只需要一個長密碼,如果你需要16個字符而沒有其他限制,那麼比1個數字,1個上限和1個點數的8個字符更安全。)
你可以做到這兩點,對吧?明確說明需求,然後在確認後指出錯誤消息中沒有滿足哪些要求。 – zahabba
*「(是的,這個是用於Javascript)「*:在這種情況下使用標籤。 –
Javascript不支持'[[:punct:]]' –
'(?= ...)'是一個前瞻斷言,而不是一個捕獲組。 –