用PHP实现强密码

时间:2011-08-25 20:22:32

标签: php codeigniter passwords

我试图检查,如果用户创建了包含符号(包括+, - ,=符号)OR / AND号的密码。 我怎样才能做到这一点?

function check_password($str)
{

   if (!preg_match ("/[&@<>%\*\,\^!#$%().]/i", $str))

    {
        $this->form_validation->set_message('check_password', 'Your password should contain a number,letter,and special characters"');
        return FALSE;
    }
    else
    {
        return TRUE;
    }

} 

感谢。

3 个答案:

答案 0 :(得分:7)

我对密码强度检查的建议是将每个要求分解为单独的正则表达式,特别是:

   $regexs = array(
                 '/[0-9]+/',  // Numbers
                 '/[a-z]+/',  // Lower Case Letters
                 '/[A-Z]+/',  // Upper Case Letters
                 '/[+-=]+/',  // Your list of allowable symbols.
   );

将计数器初始化为0.对于每个正则表达式,请测试它是否匹配。如果是,则将计数器增加1.如果计数器大于3,则返回true(如果希望密码具有非常强的密码,则返回4),否则返回false。

如果您的要求发生变化,我认为从长远来看这对您来说会更加可维护。

答案 1 :(得分:2)

您不必列出所有这些字符。任何不是数字或字母的东西都是特殊字符(或空格):

(?:[^0-9A-z]|[0-9])

答案 2 :(得分:0)

我建议寻找不同的方向。如果要施加限制,只需要更长时间。正如已经指出的那样,使用符号很可能会导致用户忘记密码而永远不会回到您的网站。为了最大限度地提高安全性,请在注册页面上发布以下漫画:http://xkcd.com/936/