La bibliothèque commune Java, C ++ et JavaScript de Google pour l'analyse, la mise en forme et la validation des numéros de téléphone internationaux. La version Java est optimisée pour fonctionner sur les smartphones et est utilisée par le cadre Android depuis 4.0 (Sandwich à la crème glacée).
README
dans les répertoires pertinents pour le code qui vous intéresse.getNumberType
- obtient le type du nombre en fonction du numéro lui-même; Capable de distinguer la ligne fixe, mobile, sans frais, taux de prime, coût partagé, VoIP, numéros personnels, UAN, pager et messagerie vocale (chaque fois que possible).isNumberMatch
- obtient un niveau de confiance pour savoir si deux nombres pourraient être les mêmes.getExampleNumber
et getExampleNumberForType
- Fournissez des nombres d'exemples 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.isPossibleNumber
- Devine rapidement si un nombre est un numéro de téléphone possible en utilisant uniquement les informations de longueur, beaucoup plus rapidement qu'une validation complète.isValidNumber
- Validation complète d'un numéro de téléphone pour une région en utilisant des informations de longueur et de préfixe.AsYouTypeFormatter
- Formats des numéros de téléphone à la volée lorsque les utilisateurs entrent dans chaque chiffre.findNumbers
- Finds les nombres dans le texte.PhoneNumberOfflineGeocoder
- fournit des informations géographiques liées à un numéro de téléphone.PhoneNumberToCarrierMapper
- fournit des informations de transport liées à un numéro de téléphone.PhoneNumberToTimeZonesMapper
- fournit des informations sur le fuseau horaire liées à un numéro de téléphone.La démo Java est mise à jour avec un léger retard après la version GitHub.
Dernière mise à jour de la démonstration: V8.13.50.
Remarque: Même si la bibliothèque (Release Main Branch / Maven) est à V8.12.57, en raison de certains problèmes de déploiement, nous n'avons pas pu mettre à jour la démo Java avec la nouvelle version binaire. Nous allons bientôt réparer cela. En attendant, veuillez utiliser la démo JS.
Si ce numéro est inférieur au numéro de version de la dernière version, nous sommes entre les versions et la démo peut être dans l'une ou l'autre version.
Il existe une application Android de démonstration appelée format e.164 dans ce référentiel. Le but de cette application est de montrer un exemple de la façon dont la bibliothèque peut être utilisée dans une situation réelle, dans ce cas spécifiquement dans une application Android en utilisant Java.
La démo JavaScript peut être exécutée à divers balises; Ce lien vous amènera à master
.
Pour inclure le code Java dans votre application, intégrer à Maven (voir Wiki) ou télécharger les derniers pots du référentiel Maven.
Javadoc est automatiquement mis à jour pour refléter la dernière version à https://javadoc.io/doc/com.googlecode.libphonenumber/libphonenumber/.
Nous choisissons généralement le numéro de version suivant ces directives.
Si l'une des modifications poussées à maîtriser car la dernière version est incompatible avec l'intention / spécification d'une API LibPhonenumber existante ou peut amener les clients LibPhonenumber (Java, C ++ ou JS) pour changer leur code pour continuer à construire, nous publions un Libération majeure. Par exemple, si la dernière version était de 7,7,3, la nouvelle serait 8,0,0.
Si l'une de ces modifications permettait aux clients de mettre à jour leur code de profiter de nouvelles fonctionnalités, et si les clients devaient faire reculer ces changements dans le cas où la version était marquée comme "mauvaise", nous publions une version mineure. Par exemple, nous allions de 7.7.3 à 7.8.0.
Sinon, y compris lorsqu'une version ne contient que des changements de métadonnées, nous publions une version sous-mineure, par exemple 7.7.3 à 7.7.4.
Parfois, nous apportons des modifications internes du code ou des métadonnées qui, sans affecter la compatibilité des clients, pourraient affecter la compatibilité des porteurs de la bibliothèque. Pour de tels modifications, nous faisons des annonces à Libphonenumber-Discuss. Ces modifications ne sont pas reflétées dans le numéro de version, et nous publions une version de sous-mineur s'il n'y avait pas d'autres modifications.
Vous voulez être informé des nouvelles versions? Pendant la majeure partie de l'année, à l'exception des vacances et des circonstances atténuantes, nous libérons tous les quinze jours. Nous mettons à jour les balises de version et documentons les notes de version détaillées. Nous envoyons également une annonce à Libphonenumber-Discuss pour chaque version.
Disons que vous avez une chaîne représentant un numéro de téléphone de Suisse. C'est ainsi que vous analysez / normalisez-le dans un objet PhoneNumber
:
String swissNumberStr = "044 668 18 00" ;
PhoneNumberUtil phoneUtil = PhoneNumberUtil . getInstance ();
try {
PhoneNumber swissNumberProto = phoneUtil . parse ( swissNumberStr , "CH" );
} catch ( NumberParseException e ) {
System . err . println ( "NumberParseException was thrown: " + e . toString ());
}
À ce stade, swissNumberProto
contient:
{
"country_code" : 41 ,
"national_number" : 446681800
}
PhoneNumber
est une classe qui était à l'origine générée automatiquement à partir de phonenumber.proto
avec les modifications nécessaires pour l'efficacité. Pour plus de détails sur la signification de chaque domaine, reportez-vous aux resources/phonenumber.proto
.
Valissons maintenant si le nombre est valide:
boolean isValid = phoneUtil . isValidNumber ( swissNumberProto ); // returns true
Il existe quelques formats pris en charge par la méthode de formatage, comme illustré ci-dessous:
// Produces "+41 44 668 18 00"
System . out . println ( phoneUtil . format ( swissNumberProto , PhoneNumberFormat . INTERNATIONAL ));
// Produces "044 668 18 00"
System . out . println ( phoneUtil . format ( swissNumberProto , PhoneNumberFormat . NATIONAL ));
// Produces "+41446681800"
System . out . println ( phoneUtil . format ( swissNumberProto , PhoneNumberFormat . E164 ));
Vous pouvez également choisir de formater le numéro de la façon dont il est composé d'un autre pays:
// Produces "011 41 44 668 1800", the number when it is dialed in the United States.
System . out . println ( phoneUtil . formatOutOfCountryCallingNumber ( swissNumberProto , "US" ));
PhoneNumberUtil phoneUtil = PhoneNumberUtil . getInstance ();
AsYouTypeFormatter formatter = phoneUtil . getAsYouTypeFormatter ( "US" );
System . out . println ( formatter . inputDigit ( '6' )); // Outputs "6"
... // Input more digits
System . out . println ( formatter . inputDigit ( '3' )); // Now outputs "650 253"
PhoneNumberOfflineGeocoder geocoder = PhoneNumberOfflineGeocoder . getInstance ();
// Outputs "Zurich"
System . out . println ( geocoder . getDescriptionForNumber ( swissNumberProto , Locale . ENGLISH ));
// Outputs "Zürich"
System . out . println ( geocoder . getDescriptionForNumber ( swissNumberProto , Locale . GERMAN ));
// Outputs "Zurigo"
System . out . println ( geocoder . getDescriptionForNumber ( swissNumberProto , Locale . ITALIAN ));
Caveat: Nous ne fournissons pas de données sur le transporteur actuel d'un numéro de téléphone, seulement le transporteur d'origine qui se voit attribuer la plage correspondante. Lisez sur la portabilité des nombres.
PhoneNumber swissMobileNumber =
new PhoneNumber (). setCountryCode ( 41 ). setNationalNumber ( 798765432L );
PhoneNumberToCarrierMapper carrierMapper = PhoneNumberToCarrierMapper . getInstance ();
// Outputs "Swisscom"
System . out . println ( carrierMapper . getNameForNumber ( swissMobileNumber , Locale . ENGLISH ));
Plus d'exemples sur la façon d'utiliser la bibliothèque peuvent être trouvés dans les tests unitaires.
Plusieurs ports tiers de la bibliothèque de numéros de téléphone nous sont connus. Nous les partageons ici au cas où ils sont utiles pour les développeurs.
Cependant, nous soulignons que ces ports sont des développeurs en dehors du projet LibPhonenumber. Nous n'évaluons pas leur qualité ni n'influencé leurs processus de maintenance.
Alternatives à nos propres versions:
Class#getResourcesAsStream
et demande que les applications Android suivent les meilleures pratiques de chargement Android pour reconditionner les métadonnées et charger à partir AssetManager#open()
lui-même (FAQ). Si vous ne voulez pas le faire, consultez le port à https://github.com/michaelrocks/libphonenumber-android, qui reconditionne les métadonnées et utilise AssetManager#open()
, et peut être dépendante sans en avoir besoin de ceux-ci Optimisations de chargement spécifiques des clients. Vous devez également consulter le port sur https://github.com/lionscribe/libphonenumber-android qui prend également en charge le géocodage, et ne nécessite qu'un changement de code d'une ligne.Outils basés sur les métadonnées Libphonenumber: