Pustaka PHP untuk menguraikan, memformat, menyimpan, dan memvalidasi nomor telepon internasional. Perpustakaan ini didasarkan pada libphonenumber Google.
PHP versi 7.4 hingga PHP 8.4 saat ini didukung.
Ekstensi mbstring PECL diperlukan.
Disarankan untuk menggunakan komposer untuk menginstal perpustakaan.
composer require giggsey/libphonenumber-for-php
Anda juga dapat menggunakan autoloader lain yang sesuai dengan PSR-4.
Jika Anda tidak menggunakan composer, pastikan Anda juga memuat dependensi apa pun yang dimiliki proyek ini, seperti giggsey/locale.
Jika Anda hanya ingin menggunakan fungsionalitas inti PhoneNumber Util, Anda dapat menggunakan giggsey/libphonenumber-for-php-lite, yang menawarkan ukuran paket yang jauh lebih kecil.
Demo online tersedia, dan sumbernya dapat ditemukan di giggsey/libphonenumber-example.
getNumberType
- mendapatkan tipe nomor berdasarkan nomor itu sendiri; mampu membedakan Telepon Tetap, Seluler, Bebas Pulsa, Tarif Premium, Biaya Bersama, VoIP dan Nomor Pribadi (bila memungkinkan).isNumberMatch
- mendapatkan tingkat keyakinan apakah dua angka bisa sama.getExampleNumber
/ getExampleNumberByType
- memberikan contoh nomor yang valid untuk semua negara/wilayah, dengan opsi untuk menentukan jenis contoh nomor telepon yang diperlukan.isValidNumber
- validasi penuh nomor telepon untuk suatu wilayah menggunakan informasi panjang dan awalan.PhoneNumberOfflineGeocoder
- memberikan informasi geografis terkait nomor telepon.PhoneNumberToTimeZonesMapper
- memberikan informasi zona waktu terkait nomor telepon.PhoneNumberToCarrierMapper
- memberikan informasi operator terkait nomor telepon. Perpustakaan ini akan mencoba mengikuti nomor versi yang sama dengan Google. Mungkin ada rilis tambahan jika diperlukan untuk memperbaiki masalah kritis yang tidak dapat menunggu hingga rilis berikutnya dari Google.
Ini berarti bahwa proyek ini mungkin tidak mengikuti Pembuatan Versi Semantik, melainkan kebijakan versi Google. Akibatnya, lompatan dalam versi utama mungkin tidak mengandung perubahan apa pun yang tidak kompatibel. Silakan baca catatan rilis untuk rilis tersebut.
Google mencoba merilis versi mereka sesuai dengan Versi Semantik, sebagaimana tercantum dalam Panduan Versi mereka.
Katakanlah Anda memiliki string yang mewakili nomor telepon dari Swiss. Inilah cara Anda menguraikan/menormalkannya menjadi objek 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 );
}
Pada titik ini, swissNumberProto berisi:
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
}
Sekarang mari kita validasi apakah nomor tersebut valid:
$ isValid = $ phoneUtil -> isValidNumber ( $ swissNumberProto );
var_dump ( $ isValid ); // true
Ada beberapa format yang didukung oleh metode pemformatan, seperti yang diilustrasikan di bawah ini:
// 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 );
Anda juga dapat memilih untuk memformat nomor sesuai cara nomor tersebut dihubungi dari negara lain:
// 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 );
Perpustakaan ini menggunakan metadata nomor telepon dari libphonenumber Google. Jika pustaka ini berfungsi sebagaimana mestinya, pustaka ini akan memberikan hasil yang sama seperti proyek Google versi Java.
Jika Anda yakin bahwa nomor telepon memberikan hasil yang salah, uji terlebih dahulu dengan libphonenumber melalui Demo Online mereka. Jika itu mengembalikan hasil yang sama seperti proyek ini, dan Anda merasa itu adalah kesalahan, sampaikan itu sebagai Masalah dengan proyek libphonenumber.
Jika Demo Online Google memberikan hasil yang berbeda dengan demo libphonenumber-for-php, silakan ajukan Masalah di sini.
Pembuatan data biasanya tidak diperlukan, karena repositori ini biasanya selalu memiliki metadata data terbaru.
Jika Anda perlu membuat data, perintahnya disediakan oleh Phing. Pastikan Anda telah menginstal semua dependensi komposer dev, lalu jalankan
vendor/bin/phing compile
Proses kompilasi ini mengkloning proyek libphonenumber pada versi yang ditentukan dalam METADATA-VERSION.txt.
Proyek ini menggunakan PHPUnit Bridge untuk menjaga kompatibilitas versi PHP yang didukung.
Untuk menjalankan pengujian secara lokal, jalankan skrip ./phpunit
.
Ada paket lain yang mengintegrasikan libphonenumber-for-php ke dalam kerangka kerja.
Kerangka | Paket |
---|---|
simfoni | Paket Nomor Telepon |
Laravel | Telepon Laravel |
Yii2 | Masukan Telepon |
Kohana | Nomor Telepon |
TIPO3 | Ekstensi Telepon TYPO3 |
Paket-paket ini dipasok oleh pihak ketiga, dan kualitasnya tidak dapat dijamin.