用PHP强制使用强密码

用PHP强制使用强密码,php,codeigniter,passwords,Php,Codeigniter,Passwords,我试图检查用户是否创建了包含符号(包括+、-、=符号)或/和数字的密码。 我该怎么做 function check_password($str) { if (!preg_match ("/[&@<>%\*\,\^!#$%().]/i", $str)) { $this->form_validation->set_message('check_password', 'Your password should contain a num

我试图检查用户是否创建了包含符号(包括+、-、=符号)或/和数字的密码。 我该怎么做

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;
    }

} 
功能检查\u密码($str)
{
如果(!preg_match(“/[&@%\*\,\^!\$%()。]/i,$str))
{
$this->form_validation->set_message('check_password','您的密码应该包含数字、字母和特殊字符');
返回FALSE;
}
其他的
{
返回TRUE;
}
} 

谢谢。

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


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

   $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


我认为,如果您的要求发生变化,从长远来看,这将更易于维护。

我建议您换一个角度看。如果您要施加限制,只需要求它更长。正如已经指出的,使用符号很可能会导致用户忘记密码,永远不会回到您的座位e、 为了最大限度地提高安全性,请在注册页面上张贴以下漫画:

您是否提供了问题的答案?我个人非常讨厌那些强迫我在密码中添加一些奇怪的特殊字符的网站。因为对我造成的唯一影响是,我往往会忘记密码,需要将其记录下来,从而在密码中造成安全漏洞进程-如果您对登录尝试进行一定的速率限制,则可能会出现比字典攻击更大的漏洞。您正在搜索一个无问题的解决方案。此代码产生的问题比它解决的问题多。@Pekka添加到不一致的“强passowrd”中“跨站点的策略。我的密码生成方案在这个网站上失败了,因为我不允许使用空格,或者在那个网站上,因为它想让我使用特殊的字符,除了我碰巧使用的那些字符……我喜欢js,它告诉用户密码是弱的还是强的,如果他们仍然想使用它,那么它就在那里调用,我唯一强制的是密码长度
   $regexs = array(
                 '/[0-9]+/',  // Numbers
                 '/[a-z]+/',  // Lower Case Letters
                 '/[A-Z]+/',  // Upper Case Letters
                 '/[+-=]+/',  // Your list of allowable symbols.
   );