Laravelでカタカナのバリデーションを追加
laravel 5.8でやっています。
準備
ルールを作る
> php artisan make:rule KatakanaRule
ルールを決める
半角スペースと全角スペースも許容、エラーメッセージもvalidation.katakana
と指定
Rules/KatakanaRule.php
<?php
namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;
class KatakanaRule 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)
{
return preg_match('/^[ァ-ヾ 〜ー−]+$/u', $value);
}
/**
* Get the validation error message.
*
* @return string
*/
public function message()
{
return trans('validation.katakana');
}
}
エラーメッセージを定義する
'attributes'
にフォームのnameを登録しておくと'name_sei_kanaはカタカナで入力してください。'とかにならない。
resources/lang/ja/validation.php
return [
:
:
:
'katakana' => ':attributeはカタカナで入力してください。',
'attributes' => [
'name_sei_kana' => '姓(カナ)',
'name_mei_kana' => '名(カナ)',
],
]
バリデーションを作る
画面に合ったルール名でバリデーションクラスを作る
> php artisan make:request HogeHogeValidateRequest
バリデーションを定義する
messages()で定義してもカスタムバリデーションは利用されないので、ここには定義しない(既に定義済み)
サービスプロバイダに定義すれば動くかな?とりあえず、そこまでしたくなかったのでこの定義で。
app/Http/Requests/HogeHogeValidateRequest
<?php
namespace App\Http\Requests;
use App\Rules\KatakanaRule;
use Illuminate\Foundation\Http\FormRequest;
class HogeHogeValidateRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'name_sei_kana' => [new KatakanaRule],
'name_mei_kana' => [new KatakanaRule],
];
}
/**
* エラーメッセージのカスタマイズ
* @return array
*/
public function messages()
{
return [];
}
}
以上
上記の定義でささっとカスタムバリデーションルールを追加できる。
他にも郵便番号チェックとか作ったり。