web-dev-qa-db-ja.com

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

私はそれが持っている必要があるようなルールを追加しようとしています

  1. 少なくとも1つの小さなイワナ
  2. 少なくとも1つの大きなチャー
  3. 少なくとも1つの数字
  4. 少なくとも1つの特別な文字
  5. 最小8文字

私はこれを試してみましたが、うまくいきますrequired|confirmed|min:8|max:100|regex:/^[\w]{1,}[\W]{1,}$/正規表現テスターソフトウェア。しかし、それがLaravelで動作しない理由はわかりません

私は何かが欠けていますか?

16
Pankaj

つかいます:

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

まず、確認を個別に確認する必要はありません。 confirmedルールを使用してください。

使用していた表現は無効であり、必要なものとは何の関係もありませんでした。 一部の研究 正規表現で行うことをお勧めします。

上記の式ではパイプ(|)、配列を使用してルールを指定できます。

Edit:この式 を使用することもできますが、これはもう少し徹底的にテストされているようです。

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

PasswordStrengthPackage を確認することをお勧めします。必要なことを行い、正規表現よりもはるかに読みやすい新しい検証ルールを登録します。したがって、あなたの場合、あなたはこれを持つことができます:

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

確認値が存在し、confirmedフィールドに Password ルールを追加する限り、Password_confirmationルールは不要です。

6
Bogdan