Valider des numéros de téléphone avec Laravel
Dans un précédent article, nous vous proposions d'explorer la validation d'email dans vos formrequest. Aujourd'hui, plongeons ensemble dans la validation des numéros de téléphone ! ☎️
Allô ? Non mais allô quoi ? Tu utilises Laravel et tu valides encore les numéros de téléphone avec une regex ?
La validation des numéros de téléphone peut rapidement devenir compliquée entre les regex de validation, les différents formats selon les régions, les indicatifs ou encore le formatage du numéro ... il est facile de rapidement s'y perdre.
Mais ne vous inquiétez pas, propaganistas/laravel-phone est là pour nous simplifier la vie !
Installation
Pour commencer, nous allons installer le package avec la commande suivante :
1composer require propaganistas/laravel-phone
Validation
Une fois le package installé, vous pourrez directement utiliser laravel-phone depuis une FormRequest ou, comme ici, manuellement via la méthode validate
d'une instance de Request
:
1class HomeController 2{ 3 public function __invoke(Request $request): void 4 { 5 $request->validate([ 6 'phone_number' => ['required', 'phone'], 7 'fr_or_sg_phone_number' => ['required', 'phone:FR,SG'], 8 'mobile_phone_number' => ['required', 'phone:mobile'], 9 ]);10 }11}
Dans notre exemple, nous traitons les 3 cas suivants :
- Le première règle valide seulement que la valeur transmise est bien un numéro de téléphone valide.
- Le seconde règle vérifie que le numéro est soit un numéro français (FR) soit singapourien (SG), la liste des pays et des indicatifs est accessible à cette url.
- La dernière règle détermine si le numéro est un numéro de mobile.
Bien d'autres règles de validation sont également disponibles et vous permettront de configurer finement la validation en fonction de vos différents besoins.
Traduction
Pour personnaliser les traductions retournées par les validations, il vous suffira d’ajouter la traduction "phone" dans vos fichiers de langue :
1[2 'phone' => 'Cet :attribute doit être un numéro valide.',3]
Formatage
En plus de la validation, le package propose une classe PhoneNumber permettant de formater facilement des numéros selon vos besoins. Il suffira de lui fournir un numéro de téléphone valide et optionnellement un code pays :
1$phone = new PhoneNumber('0611225588', 'FR');
Vous pourrez ensuite manipuler et modifier ce numero de téléphone à partir de l'instance :
1$phone->formatNational(); // 06 11 22 55 882$phone->formatForCountry('SG'); // +33 6 11 22 55 88
La fonction formatForCountry(), quant à elle, formate le numéro sous une forme plus commune pour le pays passé en paramètre. Avec la méthode formatNational(), le numéro est formaté en fonction de son pays d'origine, ici la France.
À partir d'un numéro de téléphone, la class PhoneNumber pourra extraire et fournir des informations comme le pays d'origine du numéro de téléphone ou bien encore son type :
1$phone = new PhoneNumber('+33611225588');2 3$phone->getCountry(); // FR4$phone->getType(); // mobile
De plus, afin de faciliter vos tests automatisés, vous pourrez effectuer des comparaisons d'un même numéro avec des formatages différent.
1$phone = new PhoneNumber('+33611225588');2$phone2 = new PhoneNumber('00 33 6 11 22 55 88', 'FR');3 4$phone->equals('+33 6 11 22 55 88') // true5$phone->equals($phone2) // true
Format E.164
Vous l'utilisez sans doute sans le savoir ! Cette norme internationale est utilisée pour représenter les numéros de téléphone, comprenant jusqu'à 15 chiffres maximum débutant par un signe plus (+) suivi du code pays et du numéro national. Elle assure la standardisation et la compatibilité mondiale des numéros de téléphone.
Cast
Il est aussi possible de caster directement vos attributs d'un model afin de simplifier l'utilisation de PhoneNumber :
1class UserInfo extends Model 2{ 3 protected function casts(): array 4 { 5 return [ 6 'phone_number' => E164PhoneNumberCast::class, 7 ]; 8 } 9}10 11$userInfo = new UserInfo(['phone_number' => '+33611225588']);12 13$user->phone_number->formatNational(); // 06 11 22 55 88
Pour finir
De la validation des données à la manipulation, en passant par le formatage, Laravel-phone est l’outil qui vous fera gagner du temps pour gérer les numéros utilisés par vos applications.
Vous n'êtes pas encore convaincu ? Testez les fonctionnalités de ce package dans la sandbox !
A lire
Autres articles de la même catégorie
Type-Safe de A à Z
Unifiez les types entre le backend et le frontend pour réduire les bugs et améliorer la cohérence de votre code
Rémy Guillermic
Améliorez vos tests avec Infection
Vos tests seront-ils suffisamment exhaustifs pour être à l'épreuve de mutations ?
Mathieu De Gracia
Communiquez avec ChatGPT depuis Laravel
L'IA accessible depuis votre code grace à openai-php/laravel !
Mathieu De Gracia