Как проверить номер телефона в laravel 5.2?
Я хочу проверить номер телефона ввода пользователя, где номер должен быть ровно 11 и начинаться с 01, а поле значения должно быть только номером. Как это сделать с помощью проверки Laravel?
вот мой контроллер:
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');
}
6 ответов
одним из возможных решений было бы использование regex.
'phone' => 'required|regex:/(01)[0-9]{9}/'
это проверит, что вход начинается с 01 и сопровождается 9 номерами. Используя regex, вам не нужно numeric
или size
правила проверки.
если вы хотите повторно использовать этот метод проверки еще где, было бы неплохо создать свое собственное правило проверки для проверки телефонных номеров.
Docs: Пользовательская Проверка
в своем AppServiceProvider
' s boot
метод:
Validator::extend('phone_number', function($attribute, $value, $parameters)
{
return substr($value, 0, 2) == '01';
});
это позволит вам использовать phone_number
правило проверки в любом месте вашего приложения, поэтому ваша проверка формы может быть:
'phone' => 'required|numeric|phone_number|size:11'
в вашем расширении валидатора вы также можете проверить, если $value
числовой и 11 символов.
Validator::extend('phone', function($attribute, $value, $parameters, $validator) {
return preg_match('%^(?:(?:\(?(?:00|\+)([1-4]\d\d|[1-9]\d?)\)?)?[\-\.\ \\/]?)?((?:\(?\d{1,}\)?[\-\.\ \\/]?){0,})(?:[\-\.\ \\/]?(?:#|ext\.?|extension|x)[\-\.\ \\/]?(\d+))?$%i', $value) && strlen($value) >= 10;
});
Validator::replacer('phone', function($message, $attribute, $rule, $parameters) {
return str_replace(':attribute',$attribute, ':attribute is invalid phone number');
});
использование
Вставьте этот код в AppServiceProfider
для загрузки с вашего приложения.
это правило проверяет номер телефона по приведенному выше шаблону, который я нашел после
длинный поиск он соответствует наиболее распространенным мобильным или телефонным номерам во многих странах
Это позволит вам использовать phone
правило проверки в любом месте вашего приложения, поэтому ваша проверка формы может быть:
'phone' => 'required|numeric|phone'
из Laravel 5.5 вы можете использовать команду artisan для создания нового правила, которое вы можете закодировать в отношении ваших требований, чтобы решить, проходит ли оно или нет.
Ej:
php artisan make:rule PhoneNumber
затем измените app/Rules/PhoneNumber.php
, по методу проходит
/**
* Determine if the validation rule passes.
*
* @param string $attribute
* @param mixed $value
* @return bool
*/
public function passes($attribute, $value)
{
return preg_match('%^(?:(?:\(?(?:00|\+)([1-4]\d\d|[1-9]\d?)\)?)?[\-\.\ \\/]?)?((?:\(?\d{1,}\)?[\-\.\ \\/]?){0,})(?:[\-\.\ \\/]?(?:#|ext\.?|extension|x)[\-\.\ \\/]?(\d+))?$%i', $value) && strlen($value) >= 10;
}
затем используйте это правило, как вы обычно делали бы с проверкой:
use App\Rules\PhoneNumber;
$request->validate([
'name' => ['required', new PhoneNumber],
]);
есть много вещей, чтобы рассмотреть при проверке номера телефона, если вы действительно думаете об этом. (особенно международный) поэтому использование пакета лучше, чем принятый ответ, и если вы хотите что-то простое, как регулярное выражение, я бы предложил использовать что-то лучше, чем то, что предложил @SlateEntropy. (что-то вроде комплексное регулярное выражение для валидации номера телефона)