Laravel 密码验证规则有错误

Posted

技术标签:

【中文标题】Laravel 密码验证规则有错误【英文标题】:Laravel password validation rule with error 【发布时间】:2020-07-17 19:02:49 【问题描述】:

验证规则:

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

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

我想使用上面的密码验证规则,我的代码是这样的。但我仍然只能通过数字注册到我的系统。

 'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
            'password' => ['required', 'min:8', 'regex:/[a-z]/', 'regex:/[A-Z]/', 'regex:/[0-9]/', 'regex:/[@$!%*#?&]/','confirmed'],

【问题讨论】:

【参考方案1】:

你有多个正则表达式规则的问题,一个正则表达式可以概括你所有的。

^(?=.*[A-Za-z])(?=.*\d)(?=.*[@$!%*#?&])[A-Za-z\d@$!%*#?&]8,$

这意味着匹配:

8, 最少八个字符(因此不需要min:8A-Za-z上下任意字母至少一个 @$!%*#?&] 至少一个特殊字符。 \d number/s

所以你的规则现在应该是这样的:

'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
        'password' => ['required', 'regex:^(?=.*[A-Za-z])(?=.*\d)(?=.*[@$!%*#?&])[A-Za-z\d@$!%*#?&]8,$','confirmed'],

【讨论】:

不匹配 uni-codes 并且不尊重 3 out of 5 条件

以上是关于Laravel 密码验证规则有错误的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 中正则表达式规则的自定义验证消息?

Laravel 有时验证规则

如何在 laravel 验证中排除规则

Laravel 验证规则的自定义错误消息:维度

Laravel 5.4 - 如何为同一个自定义验证规则使用多个错误消息

基于数据透视表 laravel 的唯一名称规则验证