首页 > 解决方案 > Laravel 密码验证规则有错误

问题描述

验证规则:

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

英文大写字符 (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'],

标签: laravel

解决方案


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

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

这意味着,匹配:

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

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

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

推荐阅读