web-dev-qa-db-ja.com

Laravel=パスワード検証ルール

バリデーターにパスワード検証ルールを追加する方法は?

検証規則:

パスワードには、次の5つのカテゴリのうち少なくとも3つのカテゴリの文字が含まれています。

  • 英語の大文字(A〜Z)
  • 英語の小文字(a〜z)
  • 基数10桁(0 – 9)
  • 英数字以外(例:!、$、#、%)
  • Unicode文字

バリデータールールに上記のルールを追加する方法は?

ここに私のコード

// create the validation rules ------------------------
    $rules = array(
        'name'             => 'required',                        // just a normal required validation
        'email'            => 'required|email|unique:ducks',     // required and must be unique in the ducks table
        'password'         => 'required',
        'password_confirm' => 'required|same:password'           // required and has to match the password field
    );

    // do the validation ----------------------------------
    // validate against the inputs from our form
    $validator = Validator::make(Input::all(), $rules);

    // check if the validator failed -----------------------
    if ($validator->fails()) {

        // get the error messages from the validator
        $messages = $validator->messages();

        // redirect our user back to the form with the errors from the validator
        return Redirect::to('home')
            ->withErrors($validator);

    }
26
Bharanikumar

Laravelで同様のシナリオがあり、次の方法で解決しました。

パスワードには、次の5つのカテゴリのうち少なくとも3つのカテゴリの文字が含まれています。

  • 英語の大文字(A〜Z)
  • 英語の小文字(a〜z)
  • 基数10桁(0〜9)
  • 英数字以外(例:!、$、#、%)
  • Unicode文字

まず、正規表現を作成して検証する必要があります。

正規表現は次のようになります:

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

this サイトでテストし、検証しました。ただし、独自の方法で独自に実行し、それに応じて調整してください。これは正規表現の例にすぎず、必要に応じて操作できます。

したがって、最終的なLaravelコードは次のようになります:

'password' => 'required|
               min:6|
               regex:/^.*(?=.{3,})(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[\d\X])(?=.*[!$#%]).*$/|
               confirmed',

Updateコメントで@NikKが言及しているように、Laravel 5.6では、パスワード値は

'password' => ['required', 
               'min:6', 
               'regex:/^.*(?=.{3,})(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[\d\X])(?=.*[!$#%]).*$/', 
               'confirmed']

私はそれをLaravel 5.6でテストしていないので、@ NikKを信頼しています。

注:

  1. 正規表現サイトとLaravel 5テスト環境の両方でテストし、検証しましたが、動作します。
  2. 私はmin:6を使用しましたが、これはオプションですが、さまざまな側面を反映したセキュリティポリシーを持つことは常に良い習慣です。その1つは最小パスワード長です。
  3. ユーザーが正しいパスワードを入力できるように、確認済みのパスワードを使用することをお勧めします。
  4. 6文字の中に、正規表現には少なくとも3つのa〜zまたはA〜Z、および数字と特殊文字が含まれている必要があります。
  5. 本番環境に移行する前に、必ずテスト環境でコードをテストしてください。
  6. 更新:この回答で行ったことは、正規表現パスワードの単なる例です

一部のオンラインリファレンス

Laravelの正規表現ルールのカスタム検証メッセージについては、次のリンクをご覧ください:

これはOPの要件と完全には一致しませんが、うまくいけばうまくいきます。 Laravelを使用すると、次のような保守しやすい形式でルールを定義できます。

    $inputs = [
        'email'    => 'foo',
        'password' => 'bar',
    ];

    $rules = [
        'email'    => 'required|email',
        'password' => [
            'required',
            'string',
            'min:10',             // must be at least 10 characters in length
            'regex:/[a-z]/',      // must contain at least one lowercase letter
            'regex:/[A-Z]/',      // must contain at least one uppercase letter
            'regex:/[0-9]/',      // must contain at least one digit
            'regex:/[@$!%*#?&]/', // must contain a special character
        ],
    ];

    $validation = \Validator::make( $inputs, $rules );

    if ( $validation->fails() ) {
        print_r( $validation->errors()->all() );
    }

出力します:

    [
        'The email must be a valid email address.',
        'The password must be at least 10 characters.',
        'The password format is invalid.',
    ]

(正規表現ルールはデフォルトでエラーメッセージを共有します。つまり、4つの正規表現ルールの失敗は1つのエラーメッセージになります)

8
James

正規表現には良い仕事のように思えます。

Laravel検証ルールは正規表現をサポートしています。 4.Xと5.Xの両方のバージョンがサポートしています:

これも役立つかもしれません:

http://www.regular-expressions.info/unicode.html

3
Matthew Way