Découverte de paquets

Valider des numéros de téléphone avec Laravel

Rémy Guillermic avatar
Publié le 27 septembre 2024
Couverture de l'article 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 :

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 88
2$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(); // FR
4$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') // true
5$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