Help us understand the problem. What is going on with this article?

laravelで独自のバリデーションルールを追加

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 [];
    }
}

以上

上記の定義でささっとカスタムバリデーションルールを追加できる。
他にも郵便番号チェックとか作ったり。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした