Eine PHP-Bibliothek zum Parsen, Formatieren, Speichern und Validieren internationaler Telefonnummern. Diese Bibliothek basiert auf der libphonenumber von Google.
Derzeit werden die PHP-Versionen 7.4 bis PHP 8.4 unterstützt.
Die PECL-MBstring-Erweiterung ist erforderlich.
Es wird empfohlen, Composer zur Installation der Bibliothek zu verwenden.
composer require giggsey/libphonenumber-for-php
Sie können auch jeden anderen PSR-4-kompatiblen Autoloader verwenden.
Wenn Sie Composer nicht verwenden, stellen Sie sicher, dass Sie auch alle Abhängigkeiten dieses Projekts laden, z. B. giggsey/locale.
Wenn Sie nur die Kernfunktionalität von PhoneNumber Util nutzen möchten, können Sie giggsey/libphonenumber-for-php-lite verwenden, das eine viel kleinere Paketgröße bietet.
Eine Online-Demo ist verfügbar und die Quelle finden Sie unter giggsey/libphonenumber-example.
getNumberType
– ruft den Typ der Nummer basierend auf der Nummer selbst ab; ist in der Lage, Festnetz-, Mobilfunk-, gebührenfreie, Premium-Tarif-, Shared-Cost-, VoIP- und persönliche Nummern zu unterscheiden (sofern möglich).isNumberMatch
– ermittelt ein Konfidenzniveau dafür, ob zwei Zahlen gleich sein könnten.getExampleNumber
/ getExampleNumberByType
– stellt gültige Beispielnummern für alle Länder/Regionen bereit, mit der Option, anzugeben, welcher Typ von Beispieltelefonnummer benötigt wird.isValidNumber
– vollständige Validierung einer Telefonnummer für eine Region anhand von Längen- und Präfixinformationen.PhoneNumberOfflineGeocoder
– stellt geografische Informationen zu einer Telefonnummer bereit.PhoneNumberToTimeZonesMapper
– stellt Zeitzoneninformationen zu einer Telefonnummer bereit.PhoneNumberToCarrierMapper
– stellt Netzbetreiberinformationen zu einer Telefonnummer bereit. Diese Bibliothek wird versuchen, denselben Versionsnummern wie Google zu folgen. Bei Bedarf kann es zusätzliche Versionen geben, um kritische Probleme zu beheben, die nicht bis zur nächsten Version von Google warten können.
Dies bedeutet jedoch, dass dieses Projekt möglicherweise nicht der semantischen Versionierung folgt, sondern stattdessen der Versionsrichtlinie von Google. Daher enthalten Sprünge in Hauptversionen möglicherweise keine abwärtsinkompatiblen Änderungen. Bitte lesen Sie die Versionshinweise für solche Versionen.
Google versucht, seine Versionen gemäß der semantischen Versionierung zu veröffentlichen, wie in seinem Versionierungsleitfaden dargelegt.
Nehmen wir an, Sie haben eine Zeichenfolge, die eine Telefonnummer aus der Schweiz darstellt. So analysieren/normalisieren Sie es in ein PhoneNumber-Objekt:
$ 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 );
}
Zu diesem Zeitpunkt enthält swissNumberProto:
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
}
Lassen Sie uns nun überprüfen, ob die Nummer gültig ist:
$ isValid = $ phoneUtil -> isValidNumber ( $ swissNumberProto );
var_dump ( $ isValid ); // true
Es gibt einige Formate, die von der Formatierungsmethode unterstützt werden, wie unten dargestellt:
// 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 );
Sie können die Nummer auch so formatieren, wie sie aus einem anderen Land gewählt wird:
// 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 );
Diese Bibliothek verwendet Telefonnummernmetadaten aus Googles libphonenumber. Wenn diese Bibliothek wie vorgesehen funktioniert, sollte sie das gleiche Ergebnis liefern wie die Java-Version des Google-Projekts.
Wenn Sie glauben, dass eine Telefonnummer ein falsches Ergebnis liefert, testen Sie sie zunächst mit libphonenumber über deren Online-Demo. Wenn dies das gleiche Ergebnis wie dieses Projekt liefert und Sie der Meinung sind, dass es fehlerhaft ist, melden Sie es als Problem mit dem libphonenumber-Projekt.
Wenn die Online-Demo von Google ein anderes Ergebnis liefert als die libphonenumber-for-php-Demo, melden Sie bitte hier ein Problem.
Das Generieren der Daten ist normalerweise nicht erforderlich, da dieses Repository im Allgemeinen immer über die aktuellen Datenmetadaten verfügt.
Wenn Sie die Daten generieren müssen, werden die Befehle von Phing bereitgestellt. Stellen Sie sicher, dass alle Dev Composer-Abhängigkeiten installiert sind, und führen Sie es dann aus
vendor/bin/phing compile
Dieser Kompilierungsprozess klont das libphonenumber-Projekt in der in METADATA-VERSION.txt angegebenen Version.
Dieses Projekt verwendet PHPUnit Bridge, um die Kompatibilität für die unterstützten PHP-Versionen aufrechtzuerhalten.
Um die Tests lokal auszuführen, führen Sie das Skript ./phpunit
aus.
Es gibt andere Pakete, die libphonenumber-for-php in Frameworks integrieren.
Rahmen | Pakete |
---|---|
Symfony | PhoneNumberBundle |
Laravel | Laravel-Telefon |
Yii2 | PhoneInput |
Kohana | Telefonnummer |
TYPO3 | TYPO3-Telefonerweiterung |
Diese Pakete werden von Dritten geliefert und ihre Qualität kann nicht garantiert werden.