開発を進める中で、名前のフリガナを入力してもらう際にカタカナ以外を弾くというバリデーションルールが必要になりました。
しかし、デフォルトではそんなルールはないということで自作しました。
##動作環境
Docker 19.03.8
CentOS 7.8.2003
Laravel 5.5
##ルールオブジェクトの作成
artisanコマンドを用いてルールオブジェクトを作成します。
$ php artisan make:rule name_kana
appディレクトリ下にRulesディレクトリが作られその中にnama_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メソッドにはエラーメッセージを定義します。
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を返すということです。
public function message()
{
return 'カタカナを入力してください';
}
お好みのバリデーションメッセージも作りましょう。
##バリデーションに定義
他のバリデーションルール同様、定義します。
ルールオブジェクトのインスタンスを渡して指定します。
'kana' => ['nullable', 'max:50', new name_kana],
以上でオリジナルバリデーションが完成しました。
カタカナの他に、郵便番号や電話番号のバリデーションも作ることができます。