2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[Laravel] 電話番号のバリデーションルール書き方

Last updated at Posted at 2023-10-02

やりたいこと

  • 以下の条件で、携帯番号のバリデーションを行う
    • 数字11桁
    • 070/080/090 で始まる
    • ハイフンなし
    • (例: 08012341234)

バリデーションルールの書き方

書き方は主に2パターン

1. パイプ(|)区切り パターン

^(070|080|090)\d{8}$

「先頭が 070, 080, 090 のいずれか」+「半角数字8桁(半角数字で終わる)」

2. [abc]のいずれか パターン

^0[789]0\d{8}$

「先頭0始まり」+「7, 8, 9のいずれか」+「0」+「半角数字8桁(半角数字で終わる)」

実際のコード例

パイプ区切り パターン

  • パイプ区切りの正規表現を使えるように、配列形式でバリデーションを定義する
  • バリデーションルールをパイプ区切りにしてしまうと、正規表現との区別ができずエラーになる
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;

class PhoneNumberController extends Controller {
    public function store(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'phone_number' => ['requied', 'string', 'regex:/^(070|080|090)\d{8}$/'],
        ]);
        
        // do something...
    }
}

[abc]のいずれか パターン

  • バリデーションルールを配列形式で定義しなくてよいため、見た目がすっきり
  • 正規表現も、より短くシンプルに定義できる
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;

class PhoneNumberController extends Controller {
    public function store(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'phone_number' => 'required|string|regex:/^0[789]0\d{8}$/',
        ]);
        
        // do something...
    }
}

結論

1: ['requied', 'string', 'regex:/^(070|080|090)\d{8}$/']
2: 'required|string|regex:/^0[789]0\d{8}$/'

後者のほうがムダがなく、短く書けそうです👍

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?