مكتبة 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 إصدار إصداراتها وفقًا للإصدار الدلالي، كما هو موضح في دليل الإصدار الخاص بها.
لنفترض أن لديك سلسلة تمثل رقم هاتف من سويسرا. هذه هي الطريقة التي تقوم بها بتحليل/تطبيعها إلى كائن 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 التجريبي، فيرجى إثارة مشكلة هنا.
ليس هناك حاجة عادةً إلى إنشاء البيانات، حيث سيحتوي هذا المستودع دائمًا على ما يصل إلى البيانات الوصفية.
إذا كنت بحاجة إلى إنشاء البيانات، فسيتم توفير الأوامر بواسطة Phing. تأكد من تثبيت جميع تبعيات dev Composer، ثم قم بتشغيلها
vendor/bin/phing compile
تقوم عملية الترجمة هذه باستنساخ مشروع libphonenumber بالإصدار المحدد في METADATA-VERSION.txt.
يستخدم هذا المشروع PHPUnit Bridge للحفاظ على التوافق مع إصدارات PHP المدعومة.
لإجراء الاختبارات محليًا، قم بتشغيل البرنامج النصي ./phpunit
.
توجد حزم أخرى تدمج libphonenumber-for-php في أطر العمل.
نطاق | الحزم |
---|---|
سيمفوني | PhoneNumberBundle |
لارافيل | هاتف لارافيل |
Yii2 | PhoneInput |
كوهانا | رقم التليفون |
الخطأ المطبعي3 | امتداد الهاتف TYPO3 |
يتم توفير هذه الحزم من قبل أطراف ثالثة، ولا يمكن ضمان جودتها.