2012-11-22 54 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; 
    }