Laravel 5.2中的正则表达式验证

Pan*_*kaj 16 php laravel laravel-5 laravel-5.2

以下是我的密码规则:

return [
    'Password'                  => 'required|min:8|max:100|regex:[a-z{1}[A-Z]{1}[0-9]{1}]',
    'Password_confirmation'     => 'required|min:8|max:100|regex:[a-z{1}[A-Z]{1}[0-9]{1}]',
];
Run Code Online (Sandbox Code Playgroud)

我试图添加必须具有的规则

  1. 至少一个小炭
  2. 至少一个大字符
  3. 至少一个号码
  4. 至少一个特殊的字符
  5. 最少8个字符

我尝试了这个,它required|confirmed|min:8|max:100|regex:/^[\w]{1,}[\W]{1,}$/在一个正则表达式测试软件上工作.但不确定为什么它在Laravel不起作用

我错过了什么吗?

Mik*_*étt 26

使用:

return [
    'password' => [
        'required',
        'confirmed',
        'min:8',
        'max:50',
        'regex:/^(?=.*[a-z|A-Z])(?=.*[A-Z])(?=.*\d)(?=.*(_|[^\w])).+$/',
    ]
];
Run Code Online (Sandbox Code Playgroud)

首先,您无需单独检查确认.只需使用confirmed规则.

您使用的表达式无效,与您想要的内容无关.我建议你对正则表达式做一些研究.

由于上面显示的表达式使用pipes(|),您可以使用数组指定规则.

编辑:您也可以使用此表达式,它似乎已经过更彻底的测试.

/^.*(?=.{3,})(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[\d\X])(?=.*[!$#%]).*$/
Run Code Online (Sandbox Code Playgroud)

  • 设置用户可用于其密码的字符数的下限可能导致糟糕的用户体验,尤其是当用户使用生成超过20个字符的密码的密码管理器或者他们想要使用短语作为其密码时. (3认同)

Bog*_*dan 6

您可能需要检查PasswordStrengthPackage.它注册了新的验证规则,这些规则可以满足您的需要,并且比正则表达式更具可读性.所以在你的情况下你可以这样:

return [
    'Password' => 'required|min:8|max:100|case_diff|numbers|letters|symbols|confirmed'
];
Run Code Online (Sandbox Code Playgroud)

Password_confirmation只要确认值存在,并且您添加不需要的规则confirmed统治的Password领域.