Laravel 半角英数のバリデーション(alpha_num)
多くの方がはまったのではないかと思われる、Laravelでの半角英数バリデーションです。
公式サイトのマニュアルに下記記載があり、この通りに実装しようとすると
実は日本語がチェックされず、スルーされる(通ってしまう)という課題をはらんでいます。
そこで、カスタムバリデーションルールを作成して、正規表現でチェックを行うという方法をとります。
カスタムバリデーションの導入
今回は「半角英数チェック」というルールを追加します。
ルール名は「alpha_num_check」とします。
バリデーションルールの追加
バリデーションルールを作成します。下記コマンドでカスタムバリデーションルール作成の仕組みを利用できます。
php artisan make:rule alpha_num_check
コマンド実行後、下記ファイルが自動作成されます。
namespace App\Rules; use Illuminate\Contracts\Validation\Rule; class alpha_num_check 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) { // } /** * Get the validation error message. * * @return string */ public function message() { return 'The validation error message.'; } }
ルールの記載
記載が必要なのは2点です
function | 修正内容 |
---|---|
passes | $valueに対して、バリデーション成功となるルールを記載 |
message | バリデーションルールに引っかかった場合のメッセージ |
記載内容は下記の通りです
public function passes($attribute, $value) { return preg_match('/^[a-zA-Z0-9]+$/', $value); } public function message() { return trans('validation.alpha_num_check'); }
チェックする内容を変える場合は、正規表現部分を修正すれば
自在にバリデーションルールの作成が可能です。
エラーメッセ―ジはバリデーションメッセージファイルに記載します。
エラーメッセージの登録
先ほど設定した「alpha_num_check」に対するメッセージを登録します。
//下記をバリデーション言語行に追記 'alpha_num_check' => ':attribute は半角英数字で入力してください',
これでカスタムバリデーションルール追加は完了です。
このルールを使う場合は、下記の通り記載いたします。
protected function validator(array $data) { return Validator::make($data, [ 'login_id' => [new alpha_num_check()], ]); }