web-dev-qa-db-fra.com

Comment valider le numéro de téléphone dans laravel 5.2?

Je souhaite valider le numéro de téléphone saisi par l'utilisateur, le numéro devant être exactement égal à 11 et commençant par 01; Comment puis-je le faire en utilisant la validation Laravel?

Voici mon contrôleur:

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

    }
38
User57

Une solution possible serait d'utiliser regex.

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

Cela vérifiera que l’entrée commence par 01 et est suivie de 9 chiffres. En utilisant regex, vous n'avez pas besoin des règles de validation numeric ou size.

Si vous souhaitez réutiliser cette méthode de validation ailleurs, ce serait une bonne idée de créer votre propre règle de validation pour valider les numéros de téléphone.

Docs: Validation personnalisée

Dans votre méthode AppServiceProvider 's boot:

Validator::extend('phone_number', function($attribute, $value, $parameters)
{
    return substr($value, 0, 2) == '01';
});

Cela vous permettra d'utiliser la règle de validation phone_number n'importe où dans votre application. La validation de votre formulaire pourrait donc être:

'phone' => 'required|numeric|phone_number|size:11'

Dans votre extension validator, vous pouvez également vérifier si le $value est numérique et long de 11 caractères.

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

Usage

Insérez ce code dans le app/Providers/AppServiceProvider.php pour pouvoir démarrer avec votre application .

Cette règle valide le numéro de téléphone par rapport au modèle ci-dessus que j’ai trouvé après 
longue recherche correspond aux numéros de téléphone mobile ou de téléphone les plus courants dans de nombreux pays
Cela vous permettra d'utiliser la règle de validation phone n'importe où dans votre application. La validation de votre formulaire pourrait donc être:

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

18
Nady Shalaby

Utilisez required|numeric|size:11 Au lieu de required|min:11|numeric

9
Abhishek

À partir de Laravel 5.5, vous pouvez utiliser une commande artisanale pour créer une nouvelle règle que vous pouvez coder en fonction de vos besoins pour décider si elle réussit ou non.

Ej: php artisan make:rule PhoneNumber

Puis éditez app/Rules/PhoneNumber.php, lors du passage de méthode

/**
 * 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;
}

Ensuite, utilisez cette règle comme vous le feriez habituellement avec la validation:

use App\Rules\PhoneNumber;

$request->validate([
    'name' => ['required', new PhoneNumber],
]);

docs

8
vivoconunxino

Vous pouvez essayer ce package de validateur téléphonique. Téléphone Laravel

Mettre à jour

J'ai récemment découvert un autre package Validateur de téléphone Lavarel (stuyam/laravel-phone-validator) , qui utilise le service gratuit de recherche de téléphone Twilio 

6
aphoe

Vous pouvez utiliser simplement: 

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

Lors de la validation d’un numéro de téléphone, vous devez tenir compte de nombreux éléments. (surtout international), utiliser un paquet est de loin préférable à la réponse acceptée, et si vous voulez quelque chose de simple comme une regex, je suggérerais d'utiliser quelque chose de mieux que ce que @SlateEntropy a suggéré. (quelque chose comme une expression rationnelle complète pour la validation du numéro de téléphone )

0
ShaneMit