Laravel5.8でひらがなとカタカナのバリデーションを追加する方法

Laravel5.8でひらがなとカタカナのバリデーションを追加した際の手順をまとめました。

サービスプロバイダー作成

今回は CustomServiceProvider という名前で作る事にします。
まず、以下のコマンドを実行します。

php artisan make:provider CustomServiceProvider
PowerShell

コマンドを実行するとapp/Providers/CustomServiceProvider.phpが生成されます。
作成したapp/Providers/CustomServiceProvider.phpに以下を追記します。

app/Providers/CustomServiceProvider.php

<?phpnamespace App\Providers;use Illuminate\Support\ServiceProvider;use Illuminate\Support\Facades\Validator;class CustomServiceProvider extends ServiceProvider{  /** * Register services. * * @return void */ public function register() { } /** * Bootstrap services. * * @return void */ public function boot() { Validator::extend('katakana', function ($attribute, $value, $parameters, $validator) { return preg_match('/[ァ-ヴー]+/u', $value); }); Validator::extend('hiragana', function ($attribute, $value, $parameters, $validator) { return preg_match('/[ぁ-ん]+/u', $value); }); }}
PHP

作成したサービスプロバイダーを設定ファイルに追加

先ほど追記したapp/Providers/CustomServiceProvider.phpを使用できるようにconfig/app.phpprovidersに追加します。

config/app.php

'providers' => [ ... App\Providers\CustomServiceProvider::class, ...],
PHP

カスタムバリデーションをコントローラーで実装

コントローラー内にエラーメッセージを設定していますが、resources/lang/ja/validation.php内に追加することも可能です。

app/Http/Controllers/ContactController.php

<?phpnamespace App\Http\Controllers;use App\Contact;use Illuminate\Http\Request;use Session;use Redirect;use Validator;class ContactController extends Controller { public function index() { return view('contact'); } public function send(Request $request) { $this->validate($request, [ 'name_katakana' => 'required|katakana', 'name_hiragana' => 'required|hiragana', ], [ 'name_katakana.katakana' => ':attributeはカタカナで入力してください。', 'name_hiragana.hiragana' => ':attributeはひらがなで入力してください。', ], [ 'name_katakana' => '氏名(カタカナ)', 'name_hiragana' => '氏名(ひらがな)', ]); $contact = new Contact($request->all()); return view('contact.send', compact('contact'));  }}
PHP

read next