check(); } /** * 入力値の検証ルール * * クライアント側:必填(3項目)、長度 8-64、新密码仅半角英数字+记号、新/确认一致 * サーバー側:当前密码认证(hash check)、新密码不能等于旧密码(CustomRulesで実装) * * @return array|string> */ public function rules(): array { return [ // 当前パスワード:必填、8-64文字 'current_password' => [ 'required', 'string', 'min:8', 'max:64', ], // 新パスワード:必填、8-64文字、英数字+記号のみ 'password' => [ 'required', 'string', 'min:8', 'max:64', 'regex:/^[a-zA-Z0-9!@#$%^&*()_+\-=\[\]{};:\'",.<>?\/\\|`~]+$/', // 半角英数字+記号のみ ], // 新パスワード確認:必填、新パスワードと一致 'password_confirmation' => [ 'required', 'string', 'same:password', ], // hidden フィールド(フォーム側で出力) 'updated_at' => 'nullable|date_format:Y-m-d H:i:s', 'ope_pass_changed_at' => 'nullable|date_format:Y-m-d H:i:s', ]; } /** * 属性の表示名 * * @return array */ public function attributes(): array { return [ 'current_password' => '当前パスワード', 'password' => '新パスワード', 'password_confirmation' => '新パスワード確認', ]; } /** * 検証エラーメッセージのカスタマイズ * * @return array */ public function messages(): array { return [ 'current_password.required' => '当前パスワードを入力してください。', 'current_password.min' => '当前パスワードは8文字以上です。', 'current_password.max' => '当前パスワードは64文字以下です。', 'password.required' => '新パスワードを入力してください。', 'password.min' => '新パスワードは8文字以上です。', 'password.max' => '新パスワードは64文字以下です。', 'password.regex' => '新パスワードは英数字と記号のみ使用できます。', 'password_confirmation.required' => '新パスワード確認を入力してください。', 'password_confirmation.same' => '新パスワードと新パスワード確認は一致する必要があります。', ]; } }