Google's common Java, C++ and JavaScript library for parsing, formatting, and validating international phone numbers. The Java version is optimized for running on smartphones, and is used by the Android framework since 4.0 (Ice Cream Sandwich).
README
في الدلائل ذات الصلة بالرمز الذي تهتم به.getNumberType
- يحصل على نوع الرقم بناءً على الرقم نفسه ؛ قادرة على التمييز بين الخط الثابت ، والهاتف المحمول ، والرقم المجاني ، والأسعار المتميزة ، والتكلفة المشتركة ، والبوردة الصوتية ، والأرقام الشخصية ، و UAN ، و Pager ، والبريد الصوتي (كلما كان ذلك ممكنًا).isNumberMatch
- يحصل على مستوى ثقة على ما إذا كان رقمين يمكن أن يكونا هو نفسه.getExampleNumber
و getExampleNumberForType
- قدم أرقام مثال صالحة لجميع البلدان/المناطق ، مع خيار تحديد نوع الهاتف المطلوب.isPossibleNumber
- يخمن بسرعة ما إذا كان الرقم هو رقم هاتف محتمل باستخدام معلومات الطول فقط ، أسرع بكثير من التحقق الكامل.isValidNumber
- التحقق الكامل من رقم الهاتف لمنطقة ما باستخدام معلومات الطول والبادئة.AsYouTypeFormatter
- formats phone numbers on-the-fly when users enter each digit.findNumbers
- finds numbers in text.PhoneNumberOfflineGeocoder
- provides geographical information related to a phone number.PhoneNumberToCarrierMapper
- provides carrier information related to a phone number.PhoneNumberToTimeZonesMapper
- provides timezone information related to a phone number.The Java demo is updated with a slight delay after the GitHub release.
Last demo update: v8.13.50.
ملاحظة: على الرغم من أن المكتبة (إصدار الفرع الرئيسي/Maven) في V8.12.57 ، بسبب بعض مشكلات النشر ، لم نتمكن من تحديث عرض Java مع الإصدار الثنائي الجديد. We will soon fix this. في هذه الأثناء ، يرجى استخدام JS Demo.
إذا كان هذا الرقم أقل من رقم إصدار الإصدار الأخير ، فقد يكوننا بين الإصدارات وقد يكون العرض التوضيحي في أي من الإصدارين.
There is a demo Android App called E.164 Formatter in this repository. الغرض من هذا التطبيق هو إظهار مثال على كيفية استخدام المكتبة في حالة واقعية ، وفي هذه الحالة على وجه التحديد في تطبيق Android باستخدام Java.
The JavaScript demo may be run at various tags; this link will take you to master
.
لتضمين رمز Java في التطبيق الخاص بك ، إما الاندماج مع Maven (انظر Wiki) أو قم بتنزيل أحدث الجرار من مستودع Maven.
يتم تحديث Javadoc تلقائيًا لتعكس أحدث إصدار في https://javadoc.io/doc/com.googlecode.libphonenber/libphonenber/.
نختار عمومًا رقم الإصدار بعد هذه الإرشادات.
إذا كان أي من التغييرات التي يتم دفعها إلى السيطرة منذ الإصدار الأخير لا يتوافق مع نية / مواصفات واجهة برمجة تطبيقات libphonenber الحالية أو قد تتسبب إطلاق رئيسي. على سبيل المثال ، إذا كان الإصدار الأخير هو 7.7.3 ، فإن الإصدار الجديد سيكون 8.0.0.
إذا كان أي من هذه التغييرات يمكّن العملاء من تحديث التعليمات البرمجية الخاصة بهم للاستفادة من الوظائف الجديدة ، وإذا كان على العملاء أن يتعرفوا على هذه التغييرات في حالة تمييز الإصدار على أنه "سيء" ، فإننا ننشر إصدارًا بسيطًا. على سبيل المثال ، سنذهب من 7.7.3 إلى 7.8.0.
خلاف ذلك ، بما في ذلك عندما يحتوي الإصدار على تغييرات بيانات التعريف فقط ، ننشر إصدارًا فرعيًا ، على سبيل المثال 7.7.3 إلى 7.7.4.
في بعض الأحيان ، نقوم بإجراء تغييرات داخلية على الكود أو البيانات الوصفية التي ، على الرغم من عدم التأثير على التوافق مع العملاء ، يمكن أن تؤثر على توافق حمالات المكتبة. لمثل هذه التغييرات ، نصدر إعلانات إلى libphonenber-discuss. لا تنعكس مثل هذه التغييرات في رقم الإصدار ، وسننشر إصدارًا فرعيًا إذا لم تكن هناك تغييرات أخرى.
هل تريد إخطار الإصدارات الجديدة؟ خلال معظم العام ، باستثناء العطلات والظروف المخففة ، نطلق كل أسبوعين. نقوم بتحديث علامات الإصدار وملاحظات الإصدار التفصيلية للوثائق. نرسل أيضًا إعلانًا إلى libphonenber-discuss لكل إصدار.
دعنا نقول أن لديك سلسلة تمثل رقم هاتف من سويسرا. هذه هي الطريقة التي يمكنك تحليلها/تطبيعها في كائن PhoneNumber
.
String swissNumberStr = "044 668 18 00" ;
PhoneNumberUtil phoneUtil = PhoneNumberUtil . getInstance ();
try {
PhoneNumber swissNumberProto = phoneUtil . parse ( swissNumberStr , "CH" );
} catch ( NumberParseException e ) {
System . err . println ( "NumberParseException was thrown: " + e . toString ());
}
في هذه المرحلة ، يحتوي swissNumberProto
على:
{
"country_code" : 41 ,
"national_number" : 446681800
}
PhoneNumber
هو فئة تم إنشاؤها في الأصل من phonenumber.proto
مع التعديلات اللازمة للكفاءة. للحصول على تفاصيل حول معنى كل حقل ، راجع resources/phonenumber.proto
.
الآن دعونا نتحقق مما إذا كان الرقم صالحًا:
boolean isValid = phoneUtil . isValidNumber ( swissNumberProto ); // returns true
There are a few formats supported by the formatting method, as illustrated below:
// Produces "+41 44 668 18 00"
System . out . println ( phoneUtil . format ( swissNumberProto , PhoneNumberFormat . INTERNATIONAL ));
// Produces "044 668 18 00"
System . out . println ( phoneUtil . format ( swissNumberProto , PhoneNumberFormat . NATIONAL ));
// Produces "+41446681800"
System . out . println ( phoneUtil . format ( swissNumberProto , PhoneNumberFormat . E164 ));
يمكنك أيضًا اختيار تنسيق الرقم بالطريقة التي يتم الاتصال بها من بلد آخر:
// Produces "011 41 44 668 1800", the number when it is dialed in the United States.
System . out . println ( phoneUtil . formatOutOfCountryCallingNumber ( swissNumberProto , "US" ));
PhoneNumberUtil phoneUtil = PhoneNumberUtil . getInstance ();
AsYouTypeFormatter formatter = phoneUtil . getAsYouTypeFormatter ( "US" );
System . out . println ( formatter . inputDigit ( '6' )); // Outputs "6"
... // Input more digits
System . out . println ( formatter . inputDigit ( '3' )); // Now outputs "650 253"
PhoneNumberOfflineGeocoder geocoder = PhoneNumberOfflineGeocoder . getInstance ();
// Outputs "Zurich"
System . out . println ( geocoder . getDescriptionForNumber ( swissNumberProto , Locale . ENGLISH ));
// Outputs "Zürich"
System . out . println ( geocoder . getDescriptionForNumber ( swissNumberProto , Locale . GERMAN ));
// Outputs "Zurigo"
System . out . println ( geocoder . getDescriptionForNumber ( swissNumberProto , Locale . ITALIAN ));
Caveat: We do not provide data about the current carrier of a phone number, only the original carrier who is assigned the corresponding range. اقرأ عن قابلية نقل الأرقام.
PhoneNumber swissMobileNumber =
new PhoneNumber (). setCountryCode ( 41 ). setNationalNumber ( 798765432L );
PhoneNumberToCarrierMapper carrierMapper = PhoneNumberToCarrierMapper . getInstance ();
// Outputs "Swisscom"
System . out . println ( carrierMapper . getNameForNumber ( swissMobileNumber , Locale . ENGLISH ));
يمكن العثور على المزيد من الأمثلة حول كيفية استخدام المكتبة في اختبارات الوحدة.
من المعروف لنا العديد من منافذ الطرف الثالث لمكتبة رقم الهاتف. نحن نشاركهم هنا في حال كانت مفيدة للمطورين.
ومع ذلك ، فإننا نؤكد أن هذه المنافذ هي من قبل المطورين خارج مشروع Libphonenber. نحن لا نقيم جودتها أو التأثير على عمليات الصيانة الخاصة بهم.
بدائل للإصدارات الخاصة بنا:
Class#getResourcesAsStream
ويسأل أن تطبيقات Android تتبع أفضل ممارسات تحميل Android لإعادة التعبئة الوصفية والتحميل من AssetManager#open()
نفسها (FAQ). إذا كنت لا ترغب في القيام بذلك ، تحقق من المنفذ على https://github.com/michaelrocks/libphonumber-sherroid ، الذي يعيد تعبئة البيانات الوصفية واستخدام AssetManager#open()
، وقد يعتمد عليها دون الحاجة إلى ذلك تحسينات التحميل المحددة من العملاء. يجب عليك أيضًا مراجعة المنفذ على https://github.com/lionscripe/libphonenber--shlroid الذي يدعم أيضًا الترميز الجغرافي ، ويتطلب فقط تغيير رمز سطر واحد.الأدوات القائمة على بيانات التعريف libphonenber: