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()],
]);
}


