ไลบรารี PHP สำหรับการแยกวิเคราะห์ การจัดรูปแบบ การจัดเก็บ และตรวจสอบความถูกต้องของหมายเลขโทรศัพท์ต่างประเทศ ห้องสมุดนี้อิงตาม libphonenumber ของ Google
ปัจจุบันรองรับ PHP เวอร์ชัน 7.4 ถึง PHP 8.4
จำเป็นต้องมีส่วนขยาย PECL mbstring
ขอแนะนำให้ใช้ผู้แต่งเพื่อติดตั้งไลบรารี
composer require giggsey/libphonenumber-for-php
คุณยังสามารถใช้ระบบโหลดอัตโนมัติอื่นๆ ที่รองรับ PSR-4 ได้อีกด้วย
หากคุณไม่ได้ใช้ผู้แต่ง ตรวจสอบให้แน่ใจว่าคุณโหลดการอ้างอิงใดๆ ที่โปรเจ็กต์นี้มีด้วย เช่น giggsey/locale
หากคุณต้องการใช้ฟังก์ชัน PhoneNumber Util หลักเท่านั้น คุณสามารถใช้ giggsey/libphonenumber-for-php-lite ซึ่งให้ขนาดแพ็คเกจที่เล็กกว่ามาก
มีการสาธิตออนไลน์ และสามารถดูแหล่งที่มาได้ที่ giggsey/libphonenumber-example
getNumberType
- รับประเภทของตัวเลขตามตัวเลขนั้นเอง สามารถแยกแยะหมายเลขโทรศัพท์พื้นฐาน มือถือ โทรฟรี อัตราพรีเมียม ค่าใช้จ่ายที่ใช้ร่วมกัน VoIP และหมายเลขส่วนบุคคล (เมื่อเป็นไปได้)isNumberMatch
- รับระดับความเชื่อมั่นว่าตัวเลขสองตัวจะเหมือนกันหรือไม่getExampleNumber
/ getExampleNumberByType
- ให้หมายเลขตัวอย่างที่ถูกต้องสำหรับทุกประเทศ/ภูมิภาค พร้อมตัวเลือกในการระบุประเภทของหมายเลขโทรศัพท์ตัวอย่างที่ต้องการisValidNumber
- การตรวจสอบความถูกต้องของหมายเลขโทรศัพท์สำหรับภูมิภาคโดยใช้ข้อมูลความยาวและคำนำหน้าPhoneNumberOfflineGeocoder
- ให้ข้อมูลทางภูมิศาสตร์ที่เกี่ยวข้องกับหมายเลขโทรศัพท์PhoneNumberToTimeZonesMapper
- ให้ข้อมูลเขตเวลาที่เกี่ยวข้องกับหมายเลขโทรศัพท์PhoneNumberToCarrierMapper
- ให้ข้อมูลผู้ให้บริการที่เกี่ยวข้องกับหมายเลขโทรศัพท์ ไลบรารีนี้จะพยายามใช้หมายเลขเวอร์ชันเดียวกันกับ Google อาจมีรุ่นเพิ่มเติมที่จำเป็นในการแก้ไขปัญหาสำคัญที่ไม่สามารถรอจนกว่ารุ่นถัดไปจาก Google
นี่หมายความว่าโปรเจ็กต์นี้อาจไม่เป็นไปตามการกำหนดเวอร์ชันเชิงความหมาย แต่เป็นนโยบายเวอร์ชันของ Google แทน เป็นผลให้การข้ามในเวอร์ชันหลักอาจไม่มีการเปลี่ยนแปลงที่เข้ากันไม่ได้แบบย้อนหลัง โปรดอ่านบันทึกประจำรุ่นสำหรับการเผยแพร่ดังกล่าว
Google พยายามเผยแพร่เวอร์ชันตาม Semantic Versioning ดังที่ระบุไว้ใน Versioning Guide
สมมติว่าคุณมีสตริงที่แสดงถึงหมายเลขโทรศัพท์จากสวิตเซอร์แลนด์ นี่คือวิธีที่คุณแยกวิเคราะห์/ทำให้เป็นมาตรฐานในวัตถุ 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 );
}
ณ จุดนี้ 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
}
ตอนนี้ให้เราตรวจสอบว่าตัวเลขนั้นถูกต้องหรือไม่:
$ isValid = $ phoneUtil -> isValidNumber ( $ swissNumberProto );
var_dump ( $ isValid ); // true
วิธีการจัดรูปแบบที่รองรับมีรูปแบบอยู่สองสามรูปแบบ ดังภาพด้านล่าง:
// 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 );
คุณยังสามารถเลือกจัดรูปแบบหมายเลขในลักษณะการโทรจากประเทศอื่นได้:
// 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 );
ห้องสมุดนี้ใช้ข้อมูลเมตาหมายเลขโทรศัพท์จาก libphonenumber ของ Google หากไลบรารีนี้ทำงานตามที่ตั้งใจไว้ ไลบรารีควรให้ผลลัพธ์เหมือนกับเวอร์ชัน Java ของโปรเจ็กต์ของ Google
หากคุณเชื่อว่าหมายเลขโทรศัพท์ส่งคืนผลลัพธ์ที่ไม่ถูกต้อง ให้ทดสอบด้วย libphonenumber ผ่านการสาธิตออนไลน์ก่อน หากสิ่งนั้นส่งกลับผลลัพธ์เดียวกันกับโปรเจ็กต์นี้ และคุณรู้สึกว่ามีข้อผิดพลาด ให้ยกเป็นปัญหากับโปรเจ็กต์ libphonenumber
หากการสาธิตออนไลน์ของ Google ให้ผลลัพธ์ที่แตกต่างจากการสาธิต libphonenumber-for-php โปรดแจ้งปัญหาที่นี่
โดยปกติแล้วไม่จำเป็นต้องสร้างข้อมูล เนื่องจากพื้นที่เก็บข้อมูลนี้จะมีข้อมูลเมตาสูงสุดอยู่เสมอ
หากคุณต้องการสร้างข้อมูล Ping จะเป็นผู้จัดเตรียมคำสั่ง ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้งการพึ่งพาผู้แต่ง dev ทั้งหมดแล้ว จากนั้นจึงเรียกใช้
vendor/bin/phing compile
กระบวนการคอมไพล์นี้จะโคลนโครงการ libphonenumber ในเวอร์ชันที่ระบุใน METADATA-VERSION.txt
โปรเจ็กต์นี้ใช้ PHPUnit Bridge เพื่อรักษาความเข้ากันได้สำหรับเวอร์ชัน PHP ที่รองรับ
หากต้องการรันการทดสอบในเครื่อง ให้รันสคริปต์ ./phpunit
มีแพ็คเกจอื่นๆ ที่รวม libphonenumber-for-php เข้ากับเฟรมเวิร์ก
กรอบ | แพ็คเกจ |
---|---|
ซิมโฟนี่ | เบอร์โทรศัพท์บันเดิล |
ลาราเวล | โทรศัพท์ลาร์ราเวล |
ยี่2 | โทรศัพท์อินพุต |
โคฮานา | หมายเลขโทรศัพท์ |
ประเภท3 | สายต่อโทรศัพท์ TYPO3 |
บรรจุภัณฑ์เหล่านี้จัดทำโดยบุคคลที่สาม และไม่สามารถรับประกันคุณภาพได้