2013-01-23 114 views
0

更多然後一個特殊字符我有正則表達式,測試下面的規則,允許密碼

  1. 密碼必須至少具有一個字符。
  2. 密碼必須至少有一個數字。
  3. 密碼必須至少具有一個字母數字字符。(更多然後一個應該被允許)

我的嘗試是這樣的,

/^([a-zA-Z+]+[0-9+]+[[email protected]#$%^&*])$/ 

這工作得很好,作爲大多數情況下,除非我添加了更多的字母數字字符。

測試

  • 測試[qwer1234]結果[無效]結論傳遞]
  • 測試[qwer1234 $]結果[有效]結論傳遞]
  • 測試[qwer1234#$]結果[無效]結論失敗]

進行最後的測試應該得到通過,但它失敗。我知道事情是錯的,但無法擺脫正則表達式魔法。我什麼是錯的想法是,

[0-9+] // This + sign shows that you can have more then 1 of that range of numerics 

其中,

[[email protected]#$%^&*] // Does not have the + sign 

我試過,

[[email protected]#$%^&*+] // Does not have the + sign 
[[email protected]#$%^&*]+ // Does not have the + sign 

兩人都沒有工作。我錯過了什麼?

+1

有沒有你要擠進這一切的任何合法* *理由一個正則表達式? –

+2

我對你的解釋感到困惑。密碼的部分必須按照您指定的順序來進行嗎?比如,它是否必須是(字母字符)(數字)(特殊字符),還是它可以是每個中至少有一個的任意組合?我也很困惑爲什麼你在'[]'裏面有'+'...... – Ian

+0

如果他們必須按照這個順序,那麼你應該使用:'/ ^([a-zA-Z] + [ 0-9] + [!@#$%^&*] +)$ /'。將'+'放在'[]'之外意味着至少匹配集合中的一個字符。所以至少你可以有'a2&'這樣的東西。將'+'放在'[]'的內部意味着匹配「+」字符。所以在技術上,你可以在你的正則表達式中使用密碼'++ *',它會通過。我認爲它不應該,但... – Ian

回答

1

根據你實際需要,從你對你的情況的混亂描述,這裏有兩個正則表達式,我希望有所幫助。第一個要求密碼以至少1個字母字符開始,至少有1個數字字符,然後至少1個特殊字符。

/^([a-zA-Z]+[0-9]+[[email protected]#$%^&*]+)$/ 

http://jsfiddle.net/ECwP8/

如果您不需要字符來按照特定的順序,你可以試試這個正則表達式:

/(?=[^a-zA-Z]*[a-zA-Z])(?=[^0-9]*[0-9])(?=[^[email protected]#$%^&*]*[[email protected]#$%^&*])/ 

http://jsfiddle.net/bJTTk/1/

這一個簡單的要求至少有1個字母字符,至少1個數字字符和至少1個特殊字符以任何順序出現在密碼中。

1

爲什麼你需要把它全部混合成一個正則表達式?

function test_password(password) { 
    if (password.length < 2) return false;   // Minimum length 
    if (!/[0-9]/g.test(password)) return false;  // Needs a number 
    if (!/[a-z]/gi.test(password)) return false;  // Needs a letter 
    if (!/[^a-z0-9]/gi.test(password)) return false; // Needs a special char 

    return true; 
} 
0

請嘗試以下操作。如果一個角色應該是第一個,數字應該是第二個,並且下一個字母數字應該是。

/^ [A-ZA-Z] + [1-9] + [!@#$%^ & *] + $/