やりたいこと
- 以下の条件で、携帯番号のバリデーションを行う
- 数字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}$/'
後者のほうがムダがなく、短く書けそうです👍