【问题标题】:Regex Validation in Laravel 5.2Laravel 5.2 中的正则表达式验证
【发布时间】:2016-01-15 04:13:43
【问题描述】:

以下是我的密码规则:

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,}$/,在 regex 测试软件 上工作。但不确定为什么它在 Laravel

中不起作用

我错过了什么吗?

【问题讨论】:

    标签: php laravel laravel-5 laravel-5.2


    【解决方案1】:

    用途:

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

    首先,您不需要单独检查确认。只需使用confirmed 规则。

    您使用的表达式无效,与您想要的无关。我建议你在正则表达式上使用some research

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

    编辑:您也可以使用this expression,它似乎已经过更彻底的测试。

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

    【讨论】:

    • 对用户可用于其密码的字符数设置下限可能会导致糟糕的用户体验,尤其是当用户使用生成超过 20 个字符的密码或他们想要的密码管理器时使用短语作为他们的密码。
    【解决方案2】:

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

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

    只要存在确认值并且您为Password 字段添加confirmed 规则,就不需要Password_confirmation 规则。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-10
      • 2017-10-16
      • 2018-11-13
      • 1970-01-01
      • 2013-09-28
      • 2019-06-28
      相关资源
      最近更新 更多