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');
}
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.
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'
Utilisez required|numeric|size:11
Au lieu de required|min:11|numeric
À 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],
]);
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
Vous pouvez utiliser simplement:
'mobile_number' => ['required', 'digits:10'],
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 )