6

私のサインアップ フォームには、ユーザーが自分のサイトで自分自身を識別するためにテキストを入力できるニックネーム フィールドがあります。過去に、一部のユーザーは、他のユーザーが不快に感じる可能性のあるニックネームを入力していました。Laravel はフォームのバリデーション機能を提供していますが、フォーム フィールドにユーザーが不快に感じる単語が含まれていないことを確認するにはどうすればよいでしょうか?

4

2 に答える 2

13

Laravel には幅広いバリデーション ルールが含まれていますが、指定されたリストからの単語の存在をチェックすることはそれらの 1 つではありません。

http://laravel.com/docs/validation#available-validation-rules

ただし、Laravel では、独自のカスタム検証ルールを作成することもできます。

http://laravel.com/docs/validation#custom-validation-rules

以下を使用して検証ルールを作成できますValidator::extend()

Validator::extend('not_contains', function($attribute, $value, $parameters)
{
    // Banned words
    $words = array('a***', 'f***', 's***');
    foreach ($words as $word)
    {
        if (stripos($value, $word) !== false) return false;
    }
    return true;
});

上記のコードは、と呼ばれる検証ルールを定義しています。これは、フィールドの値に含まれるnot_contains各単語の存在を探し、$words見つかった場合は false を返します。それ以外の場合は、検証に合格したことを示すために true を返します。

その後、通常どおりルールを使用できます。

$rules = array(
    'nickname' => 'required|not_contains',
);

$messages = array(
    'not_contains' => 'The :attribute must not contain banned words',
);

$validator = Validator::make(Input::all(), $rules, $messages);

if ($validator->fails())
{
    return Redirect::to('register')->withErrors($validator);
}
于 2013-08-06T12:48:09.343 に答える