I want to validate user input phone number where number should be exactly 11 and started with 01 and value field should be number only. How do I do it using Laravel validation?
Here is my controller:
public function saveUser(Request $request){ $this->validate($request,[ 'name' => 'required|max:120', 'email' => 'required|email|unique:users', 'phone' => 'required|min:11|numeric', 'course_id'=>'required' ]); $user = new User(); $user->name= $request->Input(['name']); $user->email= $request->Input(['email']); $user->phone= $request->Input(['phone']); $user->date = date('Y-m-d'); $user->completed_status = '0'; $user->course_id=$request->Input(['course_id']); $user->save(); return redirect('success'); }
Advertisement
Answer
One possible solution would to use regex.
'phone' => 'required|regex:/(01)[0-9]{9}/'
This will check the input starts with 01 and is followed by 9 numbers. By using regex you don’t need the numeric
or size
validation rules.
If you want to reuse this validation method else where, it would be a good idea to create your own validation rule for validating phone numbers.
In your AppServiceProvider
‘s boot
method:
Validator::extend('phone_number', function($attribute, $value, $parameters) { return substr($value, 0, 2) == '01'; });
This will allow you to use the phone_number
validation rule anywhere in your application, so your form validation could be:
'phone' => 'required|numeric|phone_number|size:11'
In your validator extension you could also check if the $value
is numeric and 11 characters long.