2015-05-01 93 views
1

下面的代碼,要求他們輸入兩次進行確認密碼驗證的新用戶密碼:密碼驗證遺留代碼

// search to see if is a vvalid file path 
       if (($val["type"] == "password") && !strstr($key , "_confirm")) { 
        $name = $val["name"] ? $val["name"] : $key ; 

        if ($input[$name] != $input[$name . "_confirm"]) { 
         //preparing the message 
         $fields["error"] = "Password and confirmation doesn't match."; 
         $fields["errors"][$name] = 1; 
         $fields["errors"][$name . "_confirm"] = 1; 
         $fields["values"] = $input; 
        } 

       } 

我想包括額外的驗證(即密碼至少包含1數字和1個字母,特殊字符[!@#$%],長度必須至少8個字符。

什麼是正確的代碼語法與上面的代碼巢?THX

+0

你想要一個布爾驗證(好/壞),還是驗證密碼強度? – copeg

+0

只需驗證(即至少8個字符的長度,至少包含1個數字和特殊字符)。 –

回答

2

要添加驗證,你需要找到你喜歡的正則表達式,例如

http://regexlib.com/Search.aspx?k=password&AspxAutoDetectCookieSupport=1

然後使用該正則表達式中的代碼(與您選擇替換$regEx):

if (($val["type"] == "password") && !strstr($key , "_confirm")) { 
    $name = $val["name"] ? $val["name"] : $key ; 

    if ($input[$name] != $input[$name . "_confirm"]) { 
     //preparing the message 
     $fields["error"] = "Password and confirmation doesn't match."; 
     $fields["errors"][$name] = 1; 
     $fields["errors"][$name . "_confirm"] = 1; 
     $fields["values"] = $input; 
    } 
    if(!preg_match($regEx, $input[$name])) { 
     $fields["error"] = "Password must contain..."; 
     $fields["errors"][$name] = 1; 
     $fields["values"] = $input; 
    } 
} 

對於一上,一個低級,和一個位瓦特/分鐘8個字符:

$regEx = '/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}$/'; 

中加入某些特殊字符的要求:

$regEx = '/^(?=.*[[email protected]#$%])(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}$/'; 
+0

幹得好,凱文。奇蹟般有效。謝謝一堆! –