Laravel 5.2 中的正则表达式验证

2022-08-31 00:36:01

以下是我的密码规则:

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}]',
];

我正在尝试添加规则,使其必须具有

  1. 至少一个小字符
  2. 至少一个大字符
  3. 至少一个数字
  4. 至少一个特殊字符
  5. 最少 8 个字符

我试过这个,它的工作原理,在正则表达式测试软件上。但不确定为什么它在拉拉维尔不起作用required|confirmed|min:8|max:100|regex:/^[\w]{1,}[\W]{1,}$/

我错过了什么吗?


答案 1

用:

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

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

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

由于上面显示的表达式使用管道 (),因此可以使用数组指定规则。|

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

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

答案 2

您可能需要检查密码优势包。它注册了新的验证规则,这些规则可以满足您的需要,并且比正则表达式更具可读性。因此,在您的情况下,您可以拥有以下内容:

return [
    'Password' => 'required|min:8|max:100|case_diff|numbers|letters|symbols|confirmed'
];

只要确认值存在并且您为字段添加了已确认的规则,就不需要该规则。Password_confirmationPassword


推荐