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

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 'カタカナを入力してください';
    }

使い方

‘email’ => new EmailRule(),