Php 如何使用Laravel 5.1验证密码

Php 如何使用Laravel 5.1验证密码,php,laravel,laravel-5.1,laravel-validation,Php,Laravel,Laravel 5.1,Laravel Validation,我想验证密码,使其符合以下要求: 长度至少为8个字符 至少包含1个大写字母 包含至少1个小写字母 至少包含1个特殊字符 匹配确认字段 目前我有: $validator = \Validator::make($request, [ 'password' => 'min:8|confirmed' ],[ 'password.confirmed' => 'Both `password` and `password_confirmation` are required',

我想验证密码,使其符合以下要求:

  • 长度至少为8个字符
  • 至少包含1个大写字母
  • 包含至少1个小写字母
  • 至少包含1个特殊字符
  • 匹配确认字段
目前我有:

$validator = \Validator::make($request, [
    'password' => 'min:8|confirmed'
],[
    'password.confirmed' => 'Both `password` and `password_confirmation` are required',
    'password.min' => 'The password must contain at least 8 characters'
]);

这将照顾到最小长度和确认,但我可以找到一个很好的方法做其他检查。任何帮助都将不胜感激。

我认为您可以使用正则表达式来完成以下操作:

您可以这样使用:

['password' => ['regex:^(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=!?]).*$']]
希望它在某些方面有所帮助

试试这个,它是有效的:)


这是你独立提出的需求清单,还是强加给你的?大多数情况下,这些做法会降低安全性,因为人们很难记住与通常密码不同的密码,所以会出现在纸条之类的东西上。创建一个回调函数。并根据需要添加身份验证。在验证密码的函数中,只需返回
TRUE
FALSE
,然后检查密码验证中的响应。这不包括数字,也不允许单个消息说明密码未通过验证的原因。但它确实提供了一些选择,因此如果其他人无法想出如何做到这一点,允许按照规则定制消息,我将接受你的回答。正如我对jorge所说的,我希望能够将这些要求分离出来,以便我能够返回专门的消息
   $rules = array(
        'username' => 'required',
        'email' => 'required | between:5,100 | email ',
        'password' => 'required | confirmed |regex:/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&*()+]+.*)[0-9a-zA-Z\w!@#$%^&*()+]{8,}$/'
    );

    $input = Input::all();

    $validation = Validator::make($input, $rules);

    if ($validation->fails()){
        //if validation fails redirect with inputs
        return redirect()->route('/')->withInput()
            ->withErrors($validation);
    }