LoginSignup
7
7

More than 3 years have passed since last update.

Laravelでオリジナルのバリデーションルールを作成する

Posted at

開発を進める中で、名前のフリガナを入力してもらう際にカタカナ以外を弾くというバリデーションルールが必要になりました。
しかし、デフォルトではそんなルールはないということで自作しました。

動作環境

Docker 19.03.8
CentOS 7.8.2003
Laravel 5.5

ルールオブジェクトの作成

artisanコマンドを用いてルールオブジェクトを作成します。

$ php artisan make:rule name_kana

appディレクトリ下にRulesディレクトリが作られその中にnama_kana.phpが作られているはずです。

name_kana.php

namespace App\Rules;

use Illuminate\Contracts\Validation\Rule;

class name_kana 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.';
    }
}

ルール、メッセージを定義

passesメソッドにはルールを定義、messageメソッドにはエラーメッセージを定義します。

name_kana.php
    public function passes($attribute, $value)
    {
        if(!preg_match('/[^ァ-ヴー]/u',$value))
        {
            return true;
        }

        return false;
    }

正規表現を使い、カタカナ、「ー」(全角伸ばし棒)以外の文字列が含まれるときはfalseを返し、それ以外はtrueを返すようにします。
引数の$attributeにはキー、$valueには値が入ります。
preg_match()で第一引数の正規表現に、第二引数の値がマッチしたらtrue、マッチしなければfalseとなりますが、
!で否定していることによりマッチしたらfalse、しなければtrueになります。
つまりでカタカナと「ー」以外(/[^ァ-ヴー ]/u)が$valueに含まれていなければtrueを返すということです。

name_kana.php
    public function message()
    {
        return 'カタカナを入力してください';
    }

お好みのバリデーションメッセージも作りましょう。

バリデーションに定義

他のバリデーションルール同様、定義します。
ルールオブジェクトのインスタンスを渡して指定します。

Validate.php
'kana' => ['nullable', 'max:50', new name_kana],

以上でオリジナルバリデーションが完成しました。
カタカナの他に、郵便番号や電話番号のバリデーションも作ることができます。

7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7