バリデーターにパスワード検証ルールを追加する方法は?
検証規則:
パスワードには、次の5つのカテゴリのうち少なくとも3つのカテゴリの文字が含まれています。
バリデータールールに上記のルールを追加する方法は?
ここに私のコード
// 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);
}
Laravelで同様のシナリオがあり、次の方法で解決しました。
パスワードには、次の5つのカテゴリのうち少なくとも3つのカテゴリの文字が含まれています。
まず、正規表現を作成して検証する必要があります。
正規表現は次のようになります:
^.*(?=.{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を信頼しています。
注:
一部のオンラインリファレンス
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つのエラーメッセージになります)
正規表現には良い仕事のように思えます。
Laravel検証ルールは正規表現をサポートしています。 4.Xと5.Xの両方のバージョンがサポートしています:
これも役立つかもしれません: