Laravel 半角英数のバリデーション(alpha_num)

多くの方がはまったのではないかと思われる、Laravelでの半角英数バリデーションです。

公式サイトのマニュアルに下記記載があり、この通りに実装しようとすると

公式サイト バリデーションルール
公式サイト バリデーションルール

実は日本語がチェックされず、スルーされる(通ってしまう)という課題をはらんでいます。

そこで、カスタムバリデーションルールを作成して、正規表現でチェックを行うという方法をとります。

カスタムバリデーションの導入

今回は「半角英数チェック」というルールを追加します。

ルール名は「alpha_num_check」とします。

バリデーションルールの追加

バリデーションルールを作成します。下記コマンドでカスタムバリデーションルール作成の仕組みを利用できます。

php artisan make:rule alpha_num_check

コマンド実行後、下記ファイルが自動作成されます。

namespace App\Rules;

use Illuminate\Contracts\Validation\Rule;

class alpha_num_check implements Rule
{
    /**
     * Create a new rule instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Determine if the validation rule passes.
     *
     * @param  string  $attribute
     * @param  mixed  $value
     * @return bool
     */
    public function passes($attribute, $value)
    {
        //
    }

    /**
     * Get the validation error message.
     *
     * @return string
     */
    public function message()
    {
        return 'The validation error message.';
    }
}

ルールの記載

記載が必要なのは2点です

function修正内容
passes$valueに対して、バリデーション成功となるルールを記載
messageバリデーションルールに引っかかった場合のメッセージ

記載内容は下記の通りです

    public function passes($attribute, $value)
    {
        return preg_match('/^[a-zA-Z0-9]+$/', $value);
    }

    public function message()
    {
        return trans('validation.alpha_num_check');
    }

チェックする内容を変える場合は、正規表現部分を修正すれば

自在にバリデーションルールの作成が可能です。

エラーメッセ―ジはバリデーションメッセージファイルに記載します。

エラーメッセージの登録

先ほど設定した「alpha_num_check」に対するメッセージを登録します。

//下記をバリデーション言語行に追記    
'alpha_num_check' => ':attribute は半角英数字で入力してください',

これでカスタムバリデーションルール追加は完了です。

このルールを使う場合は、下記の通り記載いたします。

    protected function validator(array $data)
    {
        return Validator::make($data, [
            'login_id' => [new alpha_num_check()],
        ]);
    }

コメントを残す