2017-03-17 19 views
1

我有,我想申請一個密碼正則表達式模式:如何指定哪些條件不匹配?

/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[[:punct:]])./ 

有4個捕捉組。我希望能夠知道哪些捕獲組與提供的字符串不匹配,因此我可以向用戶提供具體的反饋。

例如: abcd43 - >第1個&第3組爲true;第二和第四假 (所以我可以自定義一個錯誤:「您的密碼必須包含至少一個大寫字母和標點符號。」)

+0

*「(是的,這個是用於Javascript)「*:在這種情況下使用標籤。 –

+1

Javascript不支持'[[:punct:]]' –

+1

'(?= ...)'是一個前瞻斷言,而不是一個捕獲組。 –

回答

1

最簡單的方法是分別檢查四個組。

您可以使用簡單的東西如:

if(!lowerCase(pass)) 
    print "No lower case letters" 
else if(!upperCase(pass)) 
    print "No upper" 
else if(!digits(pass)) 
    print "No digits" 
etc... 
1

只需設置一個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'); 
} 
1

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個字符更安全。)

+0

你可以做到這兩點,對吧?明確說明需求,然後在確認後指出錯誤消息中沒有滿足哪些要求。 – zahabba

相關問題