Cette bibliothèque est une version précompilée du libphonenumber
de Google, avec une interface légèrement plus simple. Il a une empreinte minimale - est de loin la plus petite bibliothèque basée sur libphonenumber disponible sur npmjs et n'a aucune dépendance.
Contrairement à libphonenumber, il inclut une fonction findNumbers( )
pour rechercher des numéros de téléphone dans un texte.
Les typages TypeScript sont fournis dans le package.
Utilise le numéro de téléphone libphone v8.13.47
v3 :
API modifiée (bien qu'avec ABI rétrocompatible)
Exportation ESM ajoutée
v4 :
Le deuxième argument pour parsePhoneNumber
est un objet
La valeur de retour est comme toJSON( )
sur la v3
Par exemple, { regionCode: 'SE' }
au lieu d'une chaîne de code de région
Aucun constructeur
Aucune fonction sur l'objet renvoyé
Aucune erreur générée
API modifiée pour être beaucoup plus propre
Non rétrocompatible, bien que comme la v3 sauf :
v5 :
Prise en charge du nœud 12 abandonné
v6 :
Prise en charge du nœud 16 abandonné
v7 :
Ajout de la fonctionnalité findNumbers( )
, pour rechercher des numéros de téléphone dans le texte
Ajout de la prise en charge des numéros courts
Puisque cette bibliothèque est précompilée, elle ne dépend pas du compilateur de fermeture et n'a pas besoin d'être chargée au démarrage. Cela rend la bibliothèque plus rapide et vous fait gagner beaucoup d'espace. Cela signifie également que cette bibliothèque est simple à utiliser dans n'importe quel projet webpack
(ou en utilisant tout autre moyen pour l'exécuter dans le navigateur).
Parmi tous les numéros de téléphone populaires utilisant libphonenumber
de Google (ou l'imitant), seul celui-ci, google-libphonenumber
et libphonenumber-js
ont des README décents avec des exemples. Cela a peut-être changé depuis la première réalisation de ces benchmarks .
Une bibliothèque doit être rapide à charger ( require()
), rapide à analyser la première fois et toutes les fois consécutives. Cela ne devrait pas gonfler votre node_modules
et devrait avoir une petite empreinte mémoire, si possible.
Ce qui suit est le résultat d'un programme de test qui charge la bibliothèque, puis analyse un numéro de téléphone, puis à nouveau. Il est appelé 100 fois pour chaque bibliothèque et les valeurs moyennes sont affichées ici. L'analyse d'un numéro de téléphone pour la première fois peut être plus lente en raison de la compilation/optimisation initiale des expressions régulières, etc. L'analyse d'un numéro de téléphone une deuxième fois montrera la vitesse probable de toutes les analyses futures au sein de ce processus.
Action | numéro de téléphone génial 2.56.0 (lib 8.12.29) | numéro de téléphone google-lib 3.2.22 (lib 8.12.27) | libphonenumber-js 1.9.23 (lib-) |
---|---|---|---|
Charger la bibliothèque pour la première fois | 11,0 ms ✅ | 29,67 ms | 32,87 ms |
Analyser le premier numéro de téléphone | 4,3 ms | 4,01 ms | 3,43 ms ✅ |
⇒ Charger + analyser le premier numéro | 15,3 ms ✅ | 33,68 ms | 36,3 ms |
Analyser le deuxième numéro de téléphone | 0,78 ms ✅ | 0,97 ms | 0,92 ms |
Utilisation accrue de la mémoire | 5,12 M ✅ | 9,99 millions | 5,86 millions |
taille des node_modules | 296 Ko ✅ | 600K | 7,6 millions |
fichiers node_modules | 8 | 7 ✅ | 653 |
importer { parsePhoneNumber } depuis 'awesome-phonenumber' const pn = parsePhoneNumber( '0707123456', { regionCode: 'SE' } );// ou sur le format e164 : const pn = parsePhoneNumber( '+46707123456' );// pn est maintenant identique à : const pn = {valid : vrai, numéro : {entrée : '0707123456', e164 : '+46707123456',international : '+46 70 712 34 56',national : '070-712 34 56',rfc3966 : 'tel:+46-70-712 -34-56',significatif : '707123456',}, possibilité : 'est-possible',regionCode : 'SE',possible : true,shortPossible : false,shortValid : false,canBeInternationallyDialled : true,type : 'mobile',countryCode : 46,typeIsMobile : true, typeIsFixedLine : false,} ;
Le type de retour est ParsedPhoneNumber
qui est soit un ParsedPhoneNumberValid
, soit un ParsedPhoneNumberInvalid
. La propriété valid
identifie si l'analyse a réussi ou non, et donc quel type est renvoyé.
Le format d'une analyse réussie est :
interface ParsedPhoneNumberValid {valid: true;number: {input: string;international: string;national: string;e164: string;rfc3966: string;significant: string;};possibility: PhoneNumberPossibility; // une union de chaînes, voir ci-dessousregionCode: string;possible: boolean;shortPossible: boolean;shortValid: boolean;canBeInternationallyDialled: boolean;type: PhoneNumberTypes; // une union de chaînes, voir ci-dessouscountryCode : number;typeIsMobile: boolean;typeIsFixedLine: boolean;}
Si le numéro n'a pas pu être analysé ou s'il y a une autre erreur, le type de retour est :
interface ParsedPhoneNumberInvalid {valid: false;possible: false;possibility: 'invalid';shortPossible: boolean;shortValid: boolean;error?: inconnu;};
Notez qu'un numéro de téléphone incorrect (invalide) peut toujours être un numéro court valide pour la région donnée.
importer {parsePhoneNumber, findNumbers,getNumberFrom,getExample,getCountryCodeForRegionCode,getRegionCodeForCountryCode,getSupportedCallingCodes,getSupportedRegionCodes,getAsYouType,} à partir de 'awesome-phonenumber'
parsePhoneNumber( phoneNumber, { regionCode: string } )
analyse un numéro de téléphone comme décrit ci-dessus.
Le premier argument est le numéro de téléphone à analyser, sous forme nationale ou internationale (e164, c'est à dire préfixé par un +
). S'il s'agit d'une forme nationale , le deuxième argument doit contenir une propriété de chaîne regionCode
, par exemple 'SE' pour la Suède, 'CH' pour la Suisse, etc.
Pour rechercher (extraire) des numéros de téléphone dans un texte, utilisez findNumbers( )
:
import { findNumbers } from 'awesome-phonenumber'const text = 'Mon numéro est le +46 707 123 456, sinon appelle le +33777777777.';const number = findNumbers( text );
La liste de numéros renvoyée est du type PhoneNumberMatch
tel que :
interface PhoneNumberMatch{texte : chaîne ; // La chaîne brute foundphoneNumber: object; // Identique au résultat de parsePhoneNumber()start: number; // Début du décalage dans le textend : number ; // Décalage de fin dans le texte}
Un deuxième argument d'options pour findNumbers( text, options )
peut être fourni sur le formulaire :
interface FindNumbersOptions{defaultRegionCode?: string;leniency?: FindNumbersLeniency;maxTries?: number;}
où FindNumbersLeniency
est une énumération de 'valid'
ou 'possible'
. La valeur par défaut est 'valid'
ce qui signifie que seuls les numéros de téléphone valides sont trouvés. Si la valeur est 'possible'
des numéros de téléphone possibles (mais invalides) sont également trouvés.
defaultRegionCode
peut être défini (par exemple sur 'SE'
pour la Suède), auquel cas les numéros de téléphone au format national (c'est-à-dire sans préfixe +
) seront trouvés, à condition qu'ils proviennent de cette région.
Pour les textes très volumineux, maxTries
définira le nombre maximum de numéros de téléphone à essayer de trouver (pas nécessairement réellement trouvés).
import { parsePhoneNumber, getNumberFrom } from 'awesome-phonenumber'const pn = parsePhoneNumber( '0707654321', { regionCode: 'SE' } );if ( pn.valid ) {const fromJp = getNumberFrom( pn, 'JP' );/ / fromJp est le numéro à appeler depuis le Japon :fromJp.number === "010 46 70 765 43 21";}
La valeur de retour de getNumberFrom
est un PhoneNumberFrom
qui est soit un PhoneNumberFromValid
, soit un PhoneNumberFromInvalid
.
Le PhoneNumberFromValid
est défini comme :
interface PhoneNumberFromValid{valid: true;number: string;}
Le PhoneNumberFromInvalid
est défini comme :
interface PhoneNumberFromInvalid{valid: false;error?: inconnu;}
Parfois, vous souhaitez afficher un exemple de numéro de téléphone formaté pour un certain pays (et peut-être aussi un certain type de numéro de téléphone). La fonction getExample
est utilisée pour cela.
import { getExample } from 'awesome-phonenumber'getExample( regionCode[, phoneNumberType] ); // Numéro de téléphone analysé
Le phoneNumberType
correspond à l’un des types définis ci-dessus.
import { getExample } from 'awesome-phonenumber'// Obtenez un exemple de numéro de téléphone suédoisconst example = getExample( 'SE' ); // Un exemple ParsedPhoneNumberValidconstMobile = getExample( 'SE', 'mobile' ); // Un ParsedPhoneNumberValidexample.number.e164 ; // par exemple '+468123456'exempleMobile.numéro.e164; // par exemple '+46701234567'exampleMobile.number.national; // par exemple '070 123 45 67'
Il existe des fonctions de conversion entre les indicatifs régionaux ISO 3166-1 à 2 caractères (par exemple « SE » pour la Suède) et les indicatifs d'appel du pays correspondant.
importer {getCountryCodeForRegionCode,getRegionCodeForCountryCode,getSupportedCallingCodes,getSupportedRegionCodes,} depuis 'awesome-phonenumber'getCountryCodeForRegionCode( regionCode ); // -> countryCodegetRegionCodeForCountryCode( countryCode ); // -> coderégion
getCountryCodeForRegionCode( 'SE' ); // -> 46getRegionCodeForCountryCode( 46 ); // -> 'SE'
getSupportedCallingCodes( ); // -> [ codes d'appel... ]
getSupportedRegionCodes( ); // -> [ codes de région... ]
L'API se compose de la classe PhoneNumber
qui utilise parfois des énumérations . Ce sont :
tapez PhoneNumberTypes =| 'ligne fixe'| 'fixe ou mobile' | 'mobile'| 'téléavertisseur'| 'numéro-personnel'| 'tarif majoré' | 'à frais partagés' | 'sans frais' | 'uan'| 'voip'| 'inconnu'
tapez PhoneNumberPossibility =| 'est-possible' | 'code-pays-invalide'| 'trop long'| 'trop court' | 'inconnu'
'international''national''e164''rfc3966''significatif'
Vous pouvez créer une classe AsYouType
avec getAsYouType()
pour formater un numéro de téléphone au fur et à mesure de sa saisie.
importer {getAsYouType} depuis 'awesome-phonenumber'const ayt = getAsYouType( 'SE' );
L'instance de classe renvoyée a les méthodes suivantes
// Ajoute un caractère à la fin du numéroayt.addChar( nextChar: string );// Récupère le numéro formaté actuelayt.number( );// Supprime le dernier caractèreayt.removeChar( );// Remplace le nombre entier par un nouveau numéro (ou un numéro vide s'il n'est pas défini)ayt.reset( number?: string );// Récupère un objet ParsedPhoneNumber représentant le numéro actuelayt.getPhoneNumber( );
Toutes les fonctions ci-dessus, à l'exception de getPhoneNumber( )
renvoient le numéro actuellement formaté sous forme de chaîne.
import { getAsYouType } from 'awesome-phonenumber'const ayt = getAsYouType( 'SE' );ayt.addChar( '0' ); // -> '0'ayt.addChar( '7' ); // -> '07'ayt.addChar( '0' ); // -> '070'ayt.addChar( '7' ); // -> '070 7'ayt.addChar( '1' ); // -> '070 71'ayt.addChar( '2' ); // -> '070 712'ayt.addChar( '3' ); // -> '070 712 3'ayt.addChar( '4' ); // -> '070 712 34'ayt.addChar( '5' ); // -> '070 712 34 5'ayt.addChar( '6' ); // -> '070 712 34 56'ayt.removeChar( ); // -> '070 712 34 5'ayt.addChar( '7' ); // -> '070 712 34 57'