Diese Bibliothek ist eine vorkompilierte Version von Googles libphonenumber
mit einer etwas einfacheren Benutzeroberfläche. Sie hat einen minimalen Platzbedarf – ist mit Abstand die kleinste libphonenumber-basierte Bibliothek, die auf npmjs verfügbar ist, und weist keine Abhängigkeiten auf.
Im Gegensatz zu libphonenumber enthält es eine Funktion findNumbers( )
um Telefonnummern im Text zu finden.
TypeScript-Typisierungen werden im Paket bereitgestellt.
Verwendet libphonenumber v8.13.47
v3:
Geänderte API (allerdings mit abwärtskompatiblem ABI)
ESM-Export hinzugefügt
v4:
Das zweite Argument für parsePhoneNumber
ist ein Objekt
Der Rückgabewert ist wie toJSON( )
in Version 3
ZB { regionCode: 'SE' }
anstelle einer Regionscodezeichenfolge
Kein Konstruktor
Keine Funktionen für das zurückgegebene Objekt
Es werden keine Fehler ausgegeben
Die API wurde geändert, um viel sauberer zu sein
Nicht abwärtskompatibel, obwohl wie v3, außer:
v5:
Unterstützung für Knoten 12 eingestellt
v6:
Unterstützung für Knoten 16 eingestellt
v7:
Funktion findNumbers( )
hinzugefügt, um Telefonnummern im Text zu finden
Unterstützung für kurze Nummern hinzugefügt
Da diese Bibliothek vorkompiliert ist, ist sie nicht vom Abschluss-Compiler abhängig und muss beim Start nicht geladen werden. Dadurch wird die Bibliothek schneller und Sie sparen viel Platz. Dies bedeutet auch, dass diese Bibliothek problemlos in jedem webpack
-Projekt verwendet werden kann (oder auf andere Weise im Browser ausgeführt werden kann).
Von allen beliebten Telefonnummern, die Googles libphonenumber
verwenden (oder nachahmen), gibt es nur bei dieser, google-libphonenumber
und libphonenumber-js
anständige README-Dateien mit Beispielen. Dies kann sich seit der ersten Durchführung dieser Benchmarks geändert haben .
Eine Bibliothek sollte schnell geladen werden können ( require()
), beim ersten Mal und bei allen aufeinanderfolgenden Malen schnell analysiert werden können. Es sollte Ihre node_modules
nicht aufblähen und wenn möglich einen geringen Speicherbedarf haben.
Das Folgende ist das Ergebnis eines Testprogramms, das die Bibliothek lädt, dann eine Telefonnummer analysiert und dann noch einmal. Es wird für jede Bibliothek 100 Mal aufgerufen und die Mittelwerte werden hier angezeigt. Das erstmalige Parsen einer Telefonnummer kann aufgrund der anfänglichen Kompilierung/Optimierung regulärer Ausdrücke usw. langsamer sein. Wenn Sie eine Telefonnummer ein zweites Mal analysieren, wird die Geschwindigkeit angezeigt, mit der voraussichtlich alle zukünftigen Analysen innerhalb dieses Prozesses durchgeführt werden.
Aktion | tolle Telefonnummer 2.56.0 (lib 8.12.29) | google-libphonenumber 3.2.22 (lib 8.12.27) | libphonenumber-js 1.9.23 (lib -) |
---|---|---|---|
Bibliothek zum ersten Mal laden | 11,0 ms ✅ | 29,67 ms | 32,87 ms |
Analysieren Sie die erste Telefonnummer | 4,3 ms | 4,01 ms | 3,43 ms ✅ |
⇒ Laden und analysieren Sie die erste Zahl | 15,3 ms ✅ | 33,68 ms | 36,3 ms |
Zweite Telefonnummer analysieren | 0,78 ms ✅ | 0,97 ms | 0,92 ms |
Erhöhte Speichernutzung | 5,12 Mio. ✅ | 9,99 Mio | 5,86 Mio |
node_modules-Größe | 296K ✅ | 600 K | 7,6 Mio |
node_modules-Dateien | 8 | 7 ✅ | 653 |
import { parsePhoneNumber } from 'awesome-phonenumber'const pn = parsePhoneNumber( '0707123456', { regionCode: 'SE' } );// oder auf e164 format:const pn = parsePhoneNumber( '+46707123456' );// pn is jetzt das Gleiche wie:const pn = {valid: true,number: {input: '0707123456',e164: '+46707123456',international: '+46 70 712 34 56',national: '070-712 34 56',rfc3966: 'tel:+46-70-712-34-56 ',bedeutsam: '707123456',},possibility: 'is-possible',regionCode: 'SE',possible: true,shortPossible: false,shortValid: false,canBeInternationallyDialled: true,type: 'mobile',countryCode: 46,typeIsMobile: true, typeIsFixedLine: false,};
Der Rückgabetyp ist ParsedPhoneNumber
der entweder ParsedPhoneNumberValid
oder ParsedPhoneNumberInvalid
ist. Die valid
-Eigenschaft gibt an, ob die Analyse erfolgreich war oder nicht, und gibt somit an, welcher Typ zurückgegeben wird.
Das Format einer erfolgreichen Analyse ist:
interface ParsedPhoneNumberValid {valid: true;number: {input: string;international: string;national: string;e164: string;rfc3966: string;significant: string;};possibility: PhoneNumberPossibility; // eine String-Vereinigung, siehe untenregionCode: string;possible: boolean;shortPossible: boolean;shortValid: boolean;canBeInternationallyDialled: boolean;type: PhoneNumberTypes; // eine String-Vereinigung, siehe untencountryCode: number;typeIsMobile: boolean;typeIsFixedLine: boolean;}
Wenn die Nummer nicht geparst werden konnte oder ein anderer Fehler aufgetreten ist, lautet der Rückgabetyp:
interface ParsedPhoneNumberInvalid {valid: false;possible: false;possibility: 'invalid';shortPossible: boolean;shortValid: boolean;error?: unbekannt;};
Beachten Sie, dass eine falsche (ungültige) Telefonnummer dennoch eine gültige Kurznummer für die angegebene Region sein kann.
importiere {parsePhoneNumber,findNumbers,getNumberFrom,getExample,getCountryCodeForRegionCode,getRegionCodeForCountryCode,getSupportedCallingCodes,getSupportedRegionCodes,getAsYouType,} aus 'awesome-phonenumber'
parsePhoneNumber( phoneNumber, { regionCode: string } )
analysiert eine Telefonnummer wie oben beschrieben.
Das erste Argument ist die zu analysierende Telefonnummer, entweder in nationaler oder internationaler Form (e164, dh mit dem Präfix +
). Bei nationaler Form muss das zweite Argument eine Zeichenfolgeneigenschaft „ regionCode
enthalten, z. B. „SE“ für Schweden, „CH“ für die Schweiz usw.
Um Telefonnummern im Text zu finden (zu extrahieren), verwenden Sie findNumbers( )
:
import { findNumbers } from 'awesome-phonenumber'const text = 'Meine Nummer ist +46 707 123 456, sonst rufen Sie +33777777777 an.';const zahlen = findNumbers( text );
Die zurückgegebene Nummernliste ist vom Typ PhoneNumberMatch
, z. B.:
Schnittstelle PhoneNumberMatch{text: string; // Die Rohzeichenfolge FoundphoneNumber: object; // Dasselbe wie das Ergebnis von parsePhoneNumber()start: number; // Startoffset im Textend: number; // Endoffset im Text}
Ein zweites Optionsargument für findNumbers( text, options )
kann im Formular bereitgestellt werden:
Schnittstelle FindNumbersOptions{defaultRegionCode?: string;leniency?: FindNumbersLeniency;maxTries?: number;}
Dabei ist FindNumbersLeniency
eine Aufzählung von 'valid'
oder 'possible'
. Der Standardwert ist 'valid'
was bedeutet, dass nur gültige Telefonnummern gefunden werden. Wenn dies auf 'possible'
gesetzt ist, werden auch mögliche (aber ungültige) Telefonnummern gefunden.
defaultRegionCode
kann eingestellt werden (z. B. auf 'SE'
für Schweden). In diesem Fall werden Telefonnummern in nationaler Form (dh ohne +
-Präfix) gefunden, sofern sie aus dieser Region stammen.
Bei wirklich großen Texten legt maxTries
die maximale Anzahl an Telefonnummern fest, die gesucht werden sollen (es ist nicht notwendig, dass sie tatsächlich gefunden werden).
import { parsePhoneNumber, getNumberFrom } from 'awesome-phonenumber'const pn = parsePhoneNumber( '0707654321', { regionCode: 'SE' } );if ( pn.valid ) {const fromJp = getNumberFrom( pn, 'JP' );/ / fromJp ist die Nummer, die aus Japan angerufen werden soll:fromJp.number === "010 46 70 765 43 21";}
Der Rückgabewert von getNumberFrom
ist ein PhoneNumberFrom
, das entweder ein PhoneNumberFromValid
oder ein PhoneNumberFromInvalid
ist.
Die PhoneNumberFromValid
ist definiert als:
Schnittstelle PhoneNumberFromValid{valid: true;number: string;}
Die PhoneNumberFromInvalid
ist definiert als:
Schnittstelle PhoneNumberFromInvalid{gültig: false;Fehler?: unbekannt;}
Manchmal möchten Sie eine formatierte Beispieltelefonnummer für ein bestimmtes Land (und möglicherweise auch einen bestimmten Telefonnummerntyp) anzeigen. Hierzu wird die Funktion getExample
verwendet.
import { getExample } from 'awesome-phonenumber'getExample( regionCode[, phoneNumberType] ); //Geparste Telefonnummer
Der phoneNumberType
ist einer der oben definierten Typen.
import { getExample } from 'awesome-phonenumber'// Holen Sie sich eine schwedische Beispieltelefonnummerconst example = getExample( 'SE' ); // A ParsedPhoneNumberValidconst exampleMobile = getExample( 'SE', 'mobile' ); // A ParsedPhoneNumberValidexample.number.e164; // zB '+468123456'exampleMobile.number.e164; // zB '+46701234567'exampleMobile.number.national; // zB '070 123 45 67'
Es gibt Konvertierungsfunktionen zwischen den zweistelligen ISO 3166-1-Regionalcodes (z. B. „SE“ für Schweden) und den entsprechenden Ländervorwahlen.
import {getCountryCodeForRegionCode,getRegionCodeForCountryCode,getSupportedCallingCodes,getSupportedRegionCodes,} from 'awesome-phonenumber'getCountryCodeForRegionCode( regionCode ); // -> CountryCodegetRegionCodeForCountryCode( CountryCode ); // -> RegionCode
getCountryCodeForRegionCode( 'SE' ); // -> 46getRegionCodeForCountryCode( 46 ); // -> 'SE'
getSupportedCallingCodes( ); // -> [Aufrufcodes...]
getSupportedRegionCodes( ); // -> [Regionalcodes...]
Die API besteht aus der PhoneNumber
-Klasse, die manchmal Aufzählungen verwendet. Diese sind:
Typ PhoneNumberTypes =| 'Festnetz'| 'Festnetz-oder-Mobilfunk'| 'mobil'| 'Pager'| 'persönliche-nummer'| 'Premium-Tarif'| 'shared-cost'| 'gebührenfrei'| 'uan'| 'voip'| 'unbekannt'
Geben Sie PhoneNumberPossibility =| ein 'ist-möglich'| 'ungültiger-Ländercode'| 'zu lang'| 'zu kurz'| 'unbekannt'
'international''national''e164''rfc3966''signifikant'
Sie können mit getAsYouType()
eine AsYouType
-Klasse erstellen, um eine Telefonnummer während der Eingabe zu formatieren.
import { getAsYouType } from 'awesome-phonenumber'const ayt = getAsYouType( 'SE' );
Die zurückgegebene Klasseninstanz verfügt über die folgenden Methoden
// Ein Zeichen am Ende der Zahl hinzufügenayt.addChar( nextChar: string );// Die aktuell formatierte Zahl abrufenayt.number( );// Das letzte Zeichen entfernenayt.removeChar( );// Die ganze Zahl durch a ersetzen neue Nummer (oder eine leere Nummer, wenn nicht definiert)ayt.reset( number?: string );// Holen Sie sich ein ParsedPhoneNumber-Objekt, das die aktuelle Nummer darstelltayt.getPhoneNumber( );
Alle oben genannten Funktionen außer getPhoneNumber( )
geben die aktuell formatierte Zahl als Zeichenfolge zurück.
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'