Une bibliothèque PHP pour analyser, formater, stocker et valider les numéros de téléphone internationaux. Cette bibliothèque est basée sur le numéro de téléphone libphone de Google.
Les versions PHP 7.4 à PHP 8.4 sont actuellement prises en charge.
L’extension PECL mbstring est requise.
Il est recommandé d'utiliser composer pour installer la bibliothèque.
composer require giggsey/libphonenumber-for-php
Vous pouvez également utiliser n’importe quel autre chargeur automatique compatible PSR-4.
Si vous n'utilisez pas composer, assurez-vous de charger également toutes les dépendances de ce projet, telles que giggsey/locale.
Si vous souhaitez uniquement utiliser la fonctionnalité principale de PhoneNumber Util, vous pouvez utiliser giggsey/libphonenumber-for-php-lite, qui offre une taille de package beaucoup plus petite.
Une démo en ligne est disponible et la source peut être trouvée sur giggsey/libphonenumber-example.
getNumberType
- obtient le type du numéro en fonction du numéro lui-même ; capable de distinguer les numéros fixes, mobiles, gratuits, à tarif majoré, à coût partagé, VoIP et personnels (dans la mesure du possible).isNumberMatch
- obtient un niveau de confiance quant à savoir si deux nombres peuvent être identiques.getExampleNumber
/ getExampleNumberByType
- fournit des exemples de numéros valides pour tous les pays/régions, avec la possibilité de spécifier quel type d'exemple de numéro de téléphone est nécessaire.isValidNumber
- validation complète d'un numéro de téléphone pour une région à l'aide des informations de longueur et de préfixe.PhoneNumberOfflineGeocoder
- fournit des informations géographiques liées à un numéro de téléphone.PhoneNumberToTimeZonesMapper
- fournit des informations de fuseau horaire liées à un numéro de téléphone.PhoneNumberToCarrierMapper
- fournit des informations sur l'opérateur liées à un numéro de téléphone. Cette bibliothèque tentera de suivre les mêmes numéros de version que Google. Des versions supplémentaires pourraient être nécessaires pour résoudre les problèmes critiques qui ne peuvent pas attendre la prochaine version de Google.
Cela signifie que ce projet ne peut pas suivre le versioning sémantique, mais plutôt la politique de version de Google. Par conséquent, les sauts dans les versions majeures peuvent ne pas contenir de modifications rétrocompatibles. Veuillez lire les notes de publication de ces versions.
Google essaie de publier ses versions selon le versioning sémantique, comme indiqué dans son guide de versioning.
Supposons que vous ayez une chaîne représentant un numéro de téléphone suisse. Voici comment l'analyser/normaliser dans un objet PhoneNumber :
$ swissNumberStr = " 044 668 18 00 " ;
$ phoneUtil = libphonenumber PhoneNumberUtil :: getInstance ();
try {
$ swissNumberProto = $ phoneUtil -> parse ( $ swissNumberStr , " CH " );
var_dump ( $ swissNumberProto );
} catch ( libphonenumber NumberParseException $ e ) {
var_dump ( $ e );
}
À ce stade, swissNumberProto contient :
class libphonenumberPhoneNumber#9 (7) {
private $countryCode =>
int(41)
private $nationalNumber =>
double(446681800)
private $extension =>
NULL
private $italianLeadingZero =>
NULL
private $rawInput =>
NULL
private $countryCodeSource =>
NULL
private $preferredDomesticCarrierCode =>
NULL
}
Vérifions maintenant si le numéro est valide :
$ isValid = $ phoneUtil -> isValidNumber ( $ swissNumberProto );
var_dump ( $ isValid ); // true
Il existe quelques formats pris en charge par la méthode de formatage, comme illustré ci-dessous :
// Produces "+41446681800"
echo $ phoneUtil -> format ( $ swissNumberProto , libphonenumber PhoneNumberFormat :: E164 );
// Produces "044 668 18 00"
echo $ phoneUtil -> format ( $ swissNumberProto , libphonenumber PhoneNumberFormat :: NATIONAL );
// Produces "+41 44 668 18 00"
echo $ phoneUtil -> format ( $ swissNumberProto , libphonenumber PhoneNumberFormat :: INTERNATIONAL );
Vous pouvez également choisir de formater le numéro de la manière dont il est composé depuis un autre pays :
// Produces "011 41 44 668 1800", the number when it is dialled in the United States.
echo $ phoneUtil -> formatOutOfCountryCallingNumber ( $ swissNumberProto , " US " );
// Produces "00 41 44 668 18 00", the number when it is dialled in Great Britain.
echo $ phoneUtil -> formatOutOfCountryCallingNumber ( $ swissNumberProto , " GB " );
$ phoneUtil = libphonenumber PhoneNumberUtil :: getInstance ();
$ swissNumberProto = $ phoneUtil -> parse ( " 044 668 18 00 " , " CH " );
$ usNumberProto = $ phoneUtil -> parse ( " +1 650 253 0000 " , " US " );
$ gbNumberProto = $ phoneUtil -> parse ( " 0161 496 0000 " , " GB " );
$ geocoder = libphonenumbergeocoding PhoneNumberOfflineGeocoder :: getInstance ();
// Outputs "Zurich"
echo $ geocoder -> getDescriptionForNumber ( $ swissNumberProto , " en_US " );
// Outputs "Zürich"
echo $ geocoder -> getDescriptionForNumber ( $ swissNumberProto , " de_DE " );
// Outputs "Zurigo"
echo $ geocoder -> getDescriptionForNumber ( $ swissNumberProto , " it_IT " );
// Outputs "Mountain View, CA"
echo $ geocoder -> getDescriptionForNumber ( $ usNumberProto , " en_US " );
// Outputs "Mountain View, CA"
echo $ geocoder -> getDescriptionForNumber ( $ usNumberProto , " de_DE " );
// Outputs "미국" (Korean for United States)
echo $ geocoder -> getDescriptionForNumber ( $ usNumberProto , " ko-KR " );
// Outputs "Manchester"
echo $ geocoder -> getDescriptionForNumber ( $ gbNumberProto , " en_GB " );
// Outputs "영국" (Korean for United Kingdom)
echo $ geocoder -> getDescriptionForNumber ( $ gbNumberProto , " ko-KR " );
$ shortNumberInfo = libphonenumber ShortNumberInfo :: getInstance ();
// true
var_dump ( $ shortNumberInfo -> isEmergencyNumber ( " 999 " , " GB " ));
// true
var_dump ( $ shortNumberInfo -> connectsToEmergencyNumber ( " 999 " , " GB " ));
// false
var_dump ( $ shortNumberInfo -> connectsToEmergencyNumber ( " 911 " , " GB " ));
// true
var_dump ( $ shortNumberInfo -> isEmergencyNumber ( " 911 " , " US " ));
// true
var_dump ( $ shortNumberInfo -> connectsToEmergencyNumber ( " 911 " , " US " ));
// false
var_dump ( $ shortNumberInfo -> isEmergencyNumber ( " 911123 " , " US " ));
// true
var_dump ( $ shortNumberInfo -> connectsToEmergencyNumber ( " 911123 " , " US " ));
$ phoneUtil = libphonenumber PhoneNumberUtil :: getInstance ();
$ swissNumberProto = $ phoneUtil -> parse ( " 798765432 " , " CH " );
$ carrierMapper = libphonenumber PhoneNumberToCarrierMapper :: getInstance ();
// Outputs "Swisscom"
echo $ carrierMapper -> getNameForNumber ( $ swissNumberProto , " en " );
$ phoneUtil = libphonenumber PhoneNumberUtil :: getInstance ();
$ swissNumberProto = $ phoneUtil -> parse ( " 798765432 " , " CH " );
$ timeZoneMapper = libphonenumber PhoneNumberToTimeZonesMapper :: getInstance ();
// returns array("Europe/Zurich")
$ timeZones = $ timeZoneMapper -> getTimeZonesForNumber ( $ swissNumberProto );
Cette bibliothèque utilise les métadonnées de numéro de téléphone du libphonenumber de Google. Si cette bibliothèque fonctionne comme prévu, elle devrait fournir le même résultat que la version Java du projet de Google.
Si vous pensez qu'un numéro de téléphone renvoie un résultat incorrect, testez-le d'abord avec libphonenumber via leur démo en ligne. Si cela renvoie le même résultat que ce projet et que vous pensez qu'il s'agit d'une erreur, signalez-le comme un problème avec le projet libphonenumber.
Si la démo en ligne de Google donne un résultat différent de la démo libphonenumber-for-php, veuillez soulever un problème ici.
La génération des données n'est normalement pas nécessaire, car ce référentiel contiendra généralement toujours les métadonnées des données.
Si vous avez besoin de générer les données, les commandes sont fournies par Phing. Assurez-vous que toutes les dépendances dev composer sont installées, puis exécutez
vendor/bin/phing compile
Ce processus de compilation clone le projet libphonenumber à la version spécifiée dans METADATA-VERSION.txt.
Ce projet utilise PHPUnit Bridge pour maintenir la compatibilité avec les versions PHP prises en charge.
Pour exécuter les tests localement, exécutez le script ./phpunit
.
Il existe d'autres packages qui intègrent libphonenumber-for-php dans les frameworks.
Cadre | Forfaits |
---|---|
Symfony | Numéro de téléphoneBundle |
Laravel | Téléphone Laravel |
Yii2 | EntréeTéléphone |
Kohana | Numéro de téléphone |
TYPE3 | Extension téléphonique TYPO3 |
Ces packages sont fournis par des tiers et leur qualité ne peut être garantie.