Edited at

[Laravel]バリデーションalpha_num指定しても全角文字が通ってしまう問題

More than 3 years have passed since last update.

下記記事はLarave4ですがLaravel5でも表題の事象が発生します。


追記(正規表現を使おう)

regexを使って正規表現を利用する

/**

* Get the validation rules that apply to the request.
*
* @return array
*/

public function rules()
{
return [
'name' => 'required',
'identifier' => 'required|regex:regex:/^[a-zA-Z0-9-]+$/|max:255',
];
}


alphaバリデーションについて


  • 半角英数字の入力を制限するフィールドで日本語の入力が通ってしまう悲しい


下記で対応(但し次はAttributes()が動かなくなります・・・)

App\Services\CustomValidator.phpファイルを作成

<?php

namespace App\Services;

class CustomValidator extends \Illuminate\Validation\Validator
{
/**
* alpah
*
* @param string $attribute
* @param string $value
* @return true
*/

protected function validateAlpha($attribute, $value)
{
return (preg_match("/^[a-z]+$/i", $value));
}

/**
* alpah_dash
*
* @param string $attribute
* @param string $value
* @return true
*/

protected function validateAlphaDash($attribute, $value)
{
return (preg_match("/^[a-z0-9_-]+$/i", $value));
}

/**
* alpah_num
*
* @param string $attribute
* @param string $value
* @return true
*/

protected function validateAlphaNum($attribute, $value)
{
return (preg_match("/^[a-z0-9]+$/i", $value));
}
}


  • バリデーション処理を変更したい処理を記述する


App\Providers\AppServiceProvider.phpファイルでカスタムバリデーションを適用する

    /**

* Bootstrap any application services.
*
* @return void
*/

public function boot()
{
Validator::resolver(function($translator, $data, $rules, $messages)
{
return new CustomValidator($translator, $data, $rules, $messages);
});
}

[参考サイト]

http://www.larajapan.com/category/laravel/