[Laravel5.7] バリデーションでNGワード設定する方法

ユーザー登録や記事投稿時に特定のワードを入れさせたくないときがあると思います。
そんな時にはバリデーションでNGワードが設定できます。

例として、ユーザー登録時に不正な名前で登録できないようにします。

コントローラーはUserControllerを使います。
store,editの両方で使えるようにするためにフォームリクエストを作ります。

php artisan make:request StoreUser
public function authorize()
{
    return true;
}

public function rules()
{
    return [
        'name' => [
            'required', 
            'max:191', 
            'max:191',
            'not_regex:/^(田中太郎)$|^(山田花子)$|/',
        ],
    ];
}

not_regexで指定した正規表現にマッチする文字列では登録できなくなります。
通常は
‘name’ => ‘required|max:191|max:191’
というふうに文字列でルールを記述すればいいのですが、regexnot_regexを使う場合、正規表現のor(|)がバリデーションルールを区切るための|と被ってしまうので、配列を使うようドキュメントに書かれています。

UserControllerに記述を追加します。

...

use App\Http\Requests\StoreUser;

class UserController extends Controller
{
    ...

    public function store(StoreUser $request)

    ...

    public function edit(StoreUser $request)

    ...
}

次にエラーメッセージの記述です。

return [

    ...

    not_regex' => '不正な:attributeです。',

    ...

    'attributes' => [
      'name' => '名前',
    ],
];

attributesの連想配列のキーはフォームのフィールド名です。

これで指定した名前で登録しようとすると「不正な名前です。」と表示されます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です