Laravelでalpha,alpha_num,alpha_dashのバリデーションを使っても日本語入力ができてしまうので、カスタムバリデーションを作成して対応してみます。
サンプルコード
カスタムバリデーションについては以前に記事を投稿していますので、そちらをご確認ください。
Laravelでカスタムバリデーションを作成する | cly7796.net
今回は上記で行った設定に、alpha,alpha_num,alpha_dashの代わりになるバリデーションを追加してみます。
app\Validator\CustomValidator.php
<?php namespace App\Validator; class CustomValidator extends \Illuminate\Validation\Validator { public function validateAlphaCheck($attribute, $value, $parameters) { return preg_match('/^[A-Za-z]+$/', $value); } public function validateAlphaNumCheck($attribute, $value, $parameters) { return preg_match('/^[A-Za-z\d]+$/', $value); } public function validateAlphaDashCheck($attribute, $value, $parameters) { return preg_match('/^[A-Za-z\d_-]+$/', $value); } }
PostController.php
<?php namespace App\Http\Controllers; use Request; use Redirect; use Validator; class PostController extends Controller { public function getIndex() { return view('post.index'); } // バリデーションのルール public $validateRules = [ 'alpha'=>'alpha_check', 'alpha_num'=>'alpha_num_check', 'alpha_dash'=>'alpha_dash_check' ]; public $validateMessages = [ 'alpha_check'=>'半角英字で入力してください。', 'alpha_num_check'=>'半角英数字で入力してください。', 'alpha_dash_check'=>'半角英数字と-_で入力してください。' ]; public function postIndex() { // postしたデータをすべて取得 $data = Request::all(); //バリデーションをインスタンス化 $val = Validator::make( $data, $this->validateRules, $this->validateMessages ); //バリデーションNGの場合 if($val->fails()){ return redirect('/post/')->withErrors($val)->withInput(); } return 'OK!'; } }
resources\views\post\index.blade.php
{!! Form::open() !!} <dl> <dt>{!! Form::label('alpha', '英字:') !!}</dt> <dd> {!! Form::text('alpha', null) !!} @if($errors->has('alpha'))<p class="error">{{ $errors->first('alpha') }}</p> @endif </dd> </dl> <dl> <dt>{!! Form::label('alpha_num', '英数字:') !!}</dt> <dd> {!! Form::text('alpha_num', null) !!} @if($errors->has('alpha_num'))<p class="error">{{ $errors->first('alpha_num') }}</p> @endif </dd> </dl> <dl> <dt>{!! Form::label('alpha_dash', '英数字とハイフン・アンダーバー:') !!}</dt> <dd> {!! Form::text('alpha_dash', null) !!} @if($errors->has('alpha_dash'))<p class="error">{{ $errors->first('alpha_dash') }}</p> @endif </dd> </dl> <div> {!! Form::submit('送信') !!} </div> {!! Form::close() !!}
日本語入力でエラーが出ることが確認できました。
【参考サイト】
コメントが承認されるまで時間がかかります。