在带有用户系统的应用中,都有用户注册的步骤,为了加强用户系统的安全,我们需要对用户的密码进行强度验证.

这边记录下我实现的一个方案.


第一步:

在input那边绑定onblur事件,在用户输入完成的时候,进行验证

<input type="password" name="password" onblur="checkPass();" />

第二步:

Javascript函数:checkPass

<script type="text/javascript">
    
    function checkPass()
    {
      var pass = $('input[name=password]').val();
      if (pass.length <6) {
        alert('密码长度至少6位');
      }
      var url = "http://www.test.com/Home/Index/checkPass";
      $.post(url,{password:pass},function(result){
					 switch (result){ //根据返回的密码强弱权重来在前端提示
            case 1:
              str = '弱';
              break;
            case 2:
              str = '中';
              break;
            case 3:
              str = '强';
              break;
            default:
              str = '弱';
          }
						alert(str);
        
      });
    }
  </script>

最后

PHP代码部分

public function checkPass()
{
    $password = Yii::$app->request->post('password');
    $patterns = [
        ['pattern'=>'/\d+/','weight'=>1], //纯数字密码权重为1
        ['pattern'=>'/[a-z]+/','weight'=>1], //纯小写字母权重为1
        ['pattern'=>'/[A-Z]+/','weight'=>2], //纯大写字母权重为2
        ['pattern'=>'/[^\w\s]+/','weight'=>3],//特殊字符权重为3
    ];

    $weight = 0;

    foreach ($patterns as $key=>$val) {
       
        if (preg_match($val['pattern'],$password)) {

            $weight += $val['weight'];  //正则表达式去匹配密码,测试密码最终的权重为多少
        }
    }
			
			//根据正则表达式匹配获得的权重,获得密码强度等级
    switch ($weight) {
        case '1':
            $result = 1;
            break;

        case '2':
            $result = 2;
            break;
        case '3':
            $result = 2;
            break;
        
        default:
            $result = 3;
            break;
    }

    echo json_encode(['weight'=>$result]);
    exit;
  
}

密码强度验证的也可以在Js中去书写,权重的分配根据自己的需求去设置. .