Подтвердить что ты не робот

Как проверить номер телефона в 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');

    }
4b9b3361

Ответ 1

Одним из возможных решений было бы использовать регулярное выражение.

'phone' => 'required|regex:/(01)[0-9]{9}/'

Это будет проверять, что ввод начинается с 01, а за ним следуют 9 номеров. Используя регулярное выражение, вам не нужны правила проверки numeric или size.

Если вы хотите повторно использовать этот метод проверки else, где было бы неплохо создать собственное правило проверки правильности номеров телефонов.

Документы: Пользовательская проверка

В вашем методе AppServiceProvider 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 символов.

Ответ 2

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');
    });

использование

Вставьте этот код в app/Providers/AppServiceProvider.php для загрузки с вашим приложением.

Это правило проверяет номер телефона по приведенному выше шаблону, который я нашел после
длительный поиск соответствует самым распространенным номерам мобильных или телефонных номеров во многих странах
Это позволит вам использовать правило проверки phone любом месте вашего приложения, поэтому проверка формы может быть следующей:

 'phone' => 'required|numeric|phone' 

Ответ 3

Использование required|numeric|size:11 Вместо required|min:11|numeric

Ответ 4

Начиная с Laravel 5.5 вы можете использовать команду ремесленника для создания нового правила, которое вы можете кодировать в соответствии с вашими требованиями, чтобы решить, будет оно выполнено или нет.

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],
]);

документы

Ответ 5

Вы можете попробовать этот пакет проверки телефона. Laravel Phone

Обновить

Недавно я обнаружил еще один пакет Lavarel Phone Validator (stuyam/laravel-phone-validator), который использует бесплатный сервис поиска телефона Twilio.

Ответ 6

При проверке номера телефона необходимо учитывать много вещей, если вы действительно думаете об этом. (особенно международные), поэтому использование пакета лучше, чем принятый ответ, и если вы хотите что-то простое, как регулярное выражение, я бы предложил использовать что-то лучше, чем предлагал @SlateEntropy. (что-то вроде Полное регулярное выражение для проверки номера телефона)

Ответ 7

Вы можете просто использовать:

        'mobile_number' => ['required', 'digits:10'],