当前位置: 首页 > 知识库问答 >
问题:

Laravel密码验证规则

祁柏
2023-03-14

如何在验证器中添加密码验证规则?

验证规则:

密码包含以下五个类别中至少三个类别的字符:

  • 英文大写字符(A–Z)
  • 英文小写字符(a–z)
  • 以10位数字(0–9)为基数
  • 非字母数字(例如:!、$、#或%)
  • Unicode字符

如何在验证器规则中添加上述规则?

我的代码在这里

// create the validation rules ------------------------
    $rules = array(
        'name'             => 'required',                        // just a normal required validation
        'email'            => 'required|email|unique:ducks',     // required and must be unique in the ducks table
        'password'         => 'required',
        'password_confirm' => 'required|same:password'           // required and has to match the password field
    );

    // do the validation ----------------------------------
    // validate against the inputs from our form
    $validator = Validator::make(Input::all(), $rules);

    // check if the validator failed -----------------------
    if ($validator->fails()) {

        // get the error messages from the validator
        $messages = $validator->messages();

        // redirect our user back to the form with the errors from the validator
        return Redirect::to('home')
            ->withErrors($validator);

    }

共有3个答案

奚和光
2023-03-14

自Laravel版本8以来,您可以使用内置密码验证:

// Require at least 8 characters...
Password::min(8)

// Require at least one letter...
Password::min(8)->letters()

// Require at least one uppercase and one lowercase letter...
Password::min(8)->mixedCase()

// Require at least one number...
Password::min(8)->numbers()

// Require at least one symbol...
Password::min(8)->symbols()

或者你可以把他们都锁起来


use Illuminate\Validation\Rules\Password;

$rules = [
    'password' => [
        'required',
        'string',
        Password::min(8)
            ->mixedCase()
            ->numbers()
            ->symbols()
            ->uncompromised(),
        'confirmed'
    ],
]
金飞
2023-03-14

这与OP要求不太匹配,但希望能有所帮助。使用Laravel,您可以以易于维护的格式定义规则,如下所示:

    $inputs = [
        'email'    => 'foo',
        'password' => 'bar',
    ];

    $rules = [
        'email'    => 'required|email',
        'password' => [
            'required',
            'string',
            'min:10',             // must be at least 10 characters in length
            'regex:/[a-z]/',      // must contain at least one lowercase letter
            'regex:/[A-Z]/',      // must contain at least one uppercase letter
            'regex:/[0-9]/',      // must contain at least one digit
            'regex:/[@$!%*#?&]/', // must contain a special character
        ],
    ];

    $validation = \Validator::make( $inputs, $rules );

    if ( $validation->fails() ) {
        print_r( $validation->errors()->all() );
    }

将输出:

    [
        'The email must be a valid email address.',
        'The password must be at least 10 characters.',
        'The password format is invalid.',
    ]

(默认情况下,正则表达式规则共享一条错误消息,即四条失败的正则表达式规则导致一条错误消息)

季博
2023-03-14

我在Laravel中遇到过类似的情况,并通过以下方式解决了它。

密码包含以下五个类别中至少三个类别的字符:

  • 英文大写字符(A–Z)

首先,我们需要创建一个正则表达式并对其进行验证。

您的正则表达式如下所示:

^.*(?=.{3,})(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[\d\x])(?=.*[!$#%]).*$

我已经在这个网站上进行了测试和验证。然而,以你自己的方式表现自己,并做出相应的调整。这只是正则表达式的一个示例,您可以按自己的方式进行操作。

因此,最终的Laravel代码应该如下所示:

'password' => 'required|
               min:6|
               regex:/^.*(?=.{3,})(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[\d\x])(?=.*[!$#%]).*$/|
               confirmed',

更新评论中提到的@NikK,在Laravel 5.5及更新版本中,密码值应封装在数组方括号中,如

'password' => ['required', 
               'min:6', 
               'regex:/^.*(?=.{3,})(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[\d\x])(?=.*[!$#%]).*$/', 
               'confirmed']

我没有在Laravel 5.5上测试它,所以我信任@NikK,因此我转而使用c#/。这几天没有太多时间和拉雷维尔在一起。

注:

  1. 我已经在正则表达式站点和Laravel 5测试环境中测试并验证了它,它是有效的。
  2. 我使用了min: 6,这是可选的,但拥有反映不同方面的安全策略总是一个很好的做法,其中之一是最小密码长度。
  3. 我建议您使用密码确认以确保用户输入正确的密码。
  4. 在6个字符中,我们的正则表达式应至少包含3个a-z或A-Z以及数字和特殊字符。
  5. 在进入生产环境之前,始终在测试环境中测试您的代码
  6. 更新:我在这个答案中所做的只是正则表达式密码的示例

一些在线参考资料

  • http://regex101.com
  • http://regexr.com(另一个正则表达式站点口味)
  • https://jex.im/regulex(可视化正则表达式)
  • http://www.pcre.org/pcre.txt(正则表达式留档)
  • http://www.regular-expressions.info/refquick.html
  • https://msdn.microsoft.com/en-us/library/az24scfc(v=vs.110). aspx
  • http://php.net/manual/en/function.preg-match.php
  • http://laravel.com/docs/5.1/validation#rule-regex
  • https://laravel.com/docs/5.6/validation#rule-regex

关于Laravel中正则表达式规则的自定义验证消息,这里有几个链接可供查看:

  • Laravel验证自定义消息
 类似资料:
  • 所以在任何一个人关闭这个之前,我在这里引用一个答案并提出一个问题。 null 还有什么想法吗?我如何使Laravel7工作,以匹配以上的约束?

  • 本文向大家介绍laravel unique验证、确认密码confirmed验证以及密码修改验证的方法,包括了laravel unique验证、确认密码confirmed验证以及密码修改验证的方法的使用技巧和注意事项,需要的朋友参考一下 confirmed 验证字段必须有一个匹配字段 foo_confirmation,例如,如果验证字段是 password,必须输入一个与之匹配的 password_

  • 我正在尝试验证密码字段是否存在。我想允许某人编辑用户,他们可能想更改用户密码,也可能不想更改用户密码。所以我想我可以使用Laravels验证规则,特别是“有时”规则来实现这一点。我有一套规则: 例如,对于其他字段,通常会有其他规则,而对于密码,则会有更严格的规则。如果传递的数据中存在密码字段,我希望这只应用min:8规则,但是如果我将密码字段留空,则会出现一个验证错误,表明密码字段是必需的。 我不

  • 我做了一个自定义验证规则,它迭代一个包含键

  • 问题内容: 因此,我必须创建验证密码是否有效的代码: 至少8个字符长 包含至少1个数字 包含至少1个大写字母 这是代码: 我不确定出什么问题,但是当我输入带有数字的密码时-它会一直告诉我我需要一个带有数字的密码。有什么办法吗? 问题答案: 您可以将模块用于正则表达式。 有了它,您的代码将如下所示:

  • 主要内容:使用方式,实例演示jQuery Password Validation(密码验证)插件扩展了 jQuery Validate 插件,提供了两种组件: 一种评价密码的相关因素的功能:比如大小写字母的混合情况、字符(数字、特殊字符)的混合情况、长度、与用户名的相似度(可选的)。 一种使用评价功能显示密码强度的验证插件自定义方法。显示的文本可以被本地化。 您可以简单地自定义强度显示的外观、本地化消息显示,并集成到已有的表