2012-11-22 80 views
0

如何檢查用戶輸入的密碼格式。字符串不重複並且用戶必須選擇數字,字符串(小寫/大寫)檢查密碼格式

聽說是我的代碼。 preg_match有什麼問題?

function checkPassFormat($ip) 
{ 
    if(preg_match('/^[a-A][0-9]/', $password)) 
     return TRUE; 
    else 
     return FALSE; 
} 
+0

不應該你告訴我們問題是什麼,我們告訴你解決方案? –

+0

這是一個常被問到的問題,您是否檢查過其他問題? http://stackoverflow.com/questions/4796681/validate-password-with-preg-match-in-php例如 –

回答

0

我認爲[a-A]意味着你只允許小型和資本A。這應該是[a-zA-Z]。您也可以嘗試[a-Z],但在C#中,例如,這不能按預期工作。

而且你可能要說「不止一個字母后跟不止一個號」:[a-zA-Z]+[0-9]+。這將允許像abDCkl98這樣的密碼。

如果你想混合字母和數字,你應該做一些像[a-zA-Z0-9]+。這是用於像a9Bdc4re這樣的密碼。

0

試試這個:

preg_match("/^[a-zA-Z0-9]+$/", $password) 
+0

@Steve這絕對匹配'a2',以及在PHP 5.4是做的。 – bear

+0

它也匹配「a」,但是 - 安全級別是密碼長度爲1的字符串 – iRaS

0

按照你的例子,這裏有另一個選擇:

"/[:alpha:][:digit:]/" 
0
 
Try out this 
$pattern = "/^[a-zA-Z0-9]*$/i"; 
if(preg_match($pattern, $value)){   
    return true; 
}else{ 
    return false; 
} 
+2

如果添加'i',則不需要'A-Z',因爲比較不區分大小寫。 –

1

我認爲這是問題的一個可愛的溶液(您也可以收集錯誤和向用戶顯示友好的信息):

const SECURELEVEL_LOW = 1; 
const SECURELEVEL_MEDIUM = 2; 
const SECURELEVEL_HIGH = 3; 
const SECURELEVEL_SERVICE = 4; 

const CONTAINS_LETTERS = 1; 
const CONTAINS_DIGITS = 2; 
const CONTAINS_CASESENSITIVELETTERS = 4; 
const CONTAINS_SPECIALCHARS = 8; 

public function _isValid($value) { 
    $valid = true; 
    switch ($this->_options['secureLevel']) { 
     case self::SECURELEVEL_SERVICE: 
     $minLength = 20; 
     $hasToContain = self::CONTAINS_LETTERS + self::CONTAINS_DIGITS + self::CONTAINS_CASESENSITIVELETTERS + self::CONTAINS_SPECIALCHARS; 
     break; 
     case self::SECURELEVEL_HIGH: 
     $minLength = 8; 
     $hasToContain = self::CONTAINS_LETTERS + self::CONTAINS_DIGITS + self::CONTAINS_CASESENSITIVELETTERS; 
     break; 
     case self::SECURELEVEL_LOW: 
     $minLength = 4; 
     $hasToContain = 0; 
     break; 
     case self::SECURELEVEL_MEDIUM: 
     default: 
     $minLength = 5; 
     $hasToContain = self::CONTAINS_LETTERS + self::CONTAINS_DIGITS; 
     break; 
    } 

    if (strlen($value) < $minLength) { 
     $valid = false; 
    } 
    if (strpos($value, ' ') !== false) { 
     $valid = false; 
    } 


    if ($hasToContain & self::CONTAINS_LETTERS) { 
     // Password has to contain letters 
     if (!preg_match('/[a-z]/i', $value)) { 
     $valid = false; 
     } 
    } 

    if ($hasToContain & self::CONTAINS_DIGITS) { 
     // Password has to contain numbers 
     if (!preg_match('/[0-9]/', $value)) { 
     $valid = false; 
     } 
    } 

    if ($hasToContain & self::CONTAINS_CASESENSITIVELETTERS) { 
     // Password has to contain small and capital letters 
     if (!preg_match('/[a-z]/', $value) || !preg_match('/[A-Z]/', $value)) { 
     $valid = false; 
     } 
    } 

    if ($hasToContain & self::CONTAINS_SPECIALCHARS) { 
     // Password has to contain a special character 
     if (!preg_match('/[^0-9a-zA-Z]/', $value)) { 
     $valid = false; 
     } 
    } 

    return $valid; 
    }