– 電話番号のフォームに入力があった場合、電話番号のバリデーションをかけたい
/^(([0-9]{2,4}-[0-9]{2,4}-[0-9]{3,4})|([0-9]{8,11})$/
– 未入力の場合はバリデーションをパスする
カスタムバリデーション公式ドキュメント: https://readouble.com/laravel/6.x/ja/validation.html#custom-validation-rules
$ php artisan make:rule PhoneRule
./app/Rules/PhoneRule.php
入力値がなかった場合は、tureを返す
public function passes($attribute, $value) { if($value){ return preg_match('/^(([0-9]{2,4}-[0-9]{2,4}-[0-9]{3,4})|([0-9]{8,11}))$/', $value); } else { return true; } } public function message() { return trans('validation.phone'); }
./app/Http/Requests/CreateUserRequest.php
use App\Rules\PhoneRule; public function rules() { return [ 'phone' => [new PhoneRule], ]; }
./resources/lang/ja/validation.php
'phone' => ':attributeはハイフン有りか無しで半角英数字8~11個の数字で入力してください。', 'attributes' => [ 'phone'=>'電話番号', ],
コントローラーやRequestsにクロージャーでも書けるそうですが、コードの保守性を鑑みても、make:ruleとしてカスタムバリデーションを作った方が良さそうです。