WEB/システム/IT技術ブログ

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'],
  }

以上で実装完了です。
実際にフォームで追加したバリデーションルールを使用してみると、全角文字を許可しないことが確認できると思います。

B!

Comment

コメントはありません

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

Monthly Archives