Laravelのバリデーションで半角英数字をチェックする(全角文字を許可しない)ルールを追加する
Laravelのバリデーションで、半角英数字をチェックするルールが用意されているのですが、日本語など全角文字には対応していないようです。
例えば、ユーザ名などに対して半角英数字「a~z」「A~Z」「0~9」を許可したいときは、以下のように「alpha_num」を追加すればチェックしてくれます。
return Validator::make($data, [ 'name' => ['required', 'string', 'alpha_dash', 'max:255'], }
但し、このルールでは日本語を含む全角文字をチェックせずにスルーしてしまいます。
オープンソースあるあるですよね。日本語に標準を合わせてパッケージ開発されてないので、当然といえば当然です。
そこで今回は、全角文字をチェックするルールを追加してみます。
新しいバリデーションルールを追加する
Laravelでは新しいバリデーションルールを追加するしくみ「カスタムバリデーションルール」が用意されています。
初めに、新しいルールを「Hankaku」を追加する場合、以下のコマンドを実行します。
> php artisan make:rule Hankaku
するとファイル「app/Rules/Hankaku.php」が作成されます。
namespace App\Rules; use Illuminate\Contracts\Validation\Rule; class Hankaku implements Rule { public function __construct() { } public function passes($attribute, $value) { } public function message() { return 'The validation error message.'; } }
こちらのファイルを編集してルールを作成するのですが、まず、関数「passes()」に入力値「$value」に対してバリデーション成功となる条件を記述します。
public function passes($attribute, $value) { return preg_match('/^[a-zA-Z0-9]+$/', $value); }
次に関数「message()」にエラーメッセージを記述します。「:attribute」には項目名が代入されます。今回のケースだと「name」が入ります。
public function message() { return ':attribute は半角英数字で入力してください'; }
また、エラーメッセージについては以下のようにして、辞書化することもできます。
public function message() { return trans('validation.hankaku'); }
「resources/lang/ja/validation.php」に以下のを追記します。
return [ (中略) 'hankaku' => ':attribute は半角英数字で入力してください',
ルール追加については以上です。
追加したバリデーションルールを使用する
それでは実際に追加したバリデーションルールを使用します。
先ほどのルール設定の個所を、以下のように書き換えます。
use App\Rules\Hankaku; (中略) return Validator::make($data, [ 'name' => ['required', 'string', new Hankaku, 'max:255'], }
以上で実装完了です。
実際にフォームで追加したバリデーションルールを使用してみると、全角文字を許可しないことが確認できると思います。
コメントする