هذه المكتبة عبارة عن نسخة مجمعة مسبقًا من libphonenumber
من Google، مع واجهة أبسط قليلاً. لها مساحة صغيرة - وهي إلى حد بعيد أصغر مكتبة قائمة على libphonenumber متاحة على npmjs، وليس لها أي تبعيات.
على عكس libphonenumber، فهو يتضمن وظيفة findNumbers( )
للعثور على أرقام الهواتف في النص.
يتم توفير أنواع TypeScript داخل الحزمة.
يستخدم libphonenumber v8.13.47
الإصدار 3:
واجهة برمجة التطبيقات التي تم تغييرها (على الرغم من وجود واجهة برمجة التطبيقات المتوافقة مع الإصدارات السابقة)
تمت إضافة تصدير ESM
الإصدار 4:
الوسيطة الثانية لـ parsePhoneNumber
هي كائن
القيمة المرجعة تشبه toJSON( )
في الإصدار 3
على سبيل المثال { regionCode: 'SE' }
بدلاً من سلسلة رمز المنطقة
لا منشئ
لا توجد وظائف على الكائن الذي تم إرجاعه
لا يتم طرح أي أخطاء
تم تغيير واجهة برمجة التطبيقات لتصبح أكثر نظافة
غير متوافق مع الإصدارات السابقة، على الرغم من أنه يشبه الإصدار 3 باستثناء:
الإصدار الخامس:
تم إسقاط دعم العقدة 12
الإصدار السادس:
تم إسقاط دعم العقدة 16
الإصدار 7:
تمت إضافة ميزة findNumbers( )
للعثور على أرقام الهواتف في النص
تمت إضافة الدعم للأرقام القصيرة
نظرًا لأن هذه المكتبة مجمعة مسبقًا، فهي لا تعتمد على مترجم الإغلاق، ولا تحتاج إلى تحميلها في البداية. وهذا يجعل المكتبة أسرع ويوفر لك مساحة كبيرة. وهذا يعني أيضًا أن هذه المكتبة سهلة الاستخدام في أي مشروع webpack
(أو استخدام أي وسيلة أخرى للتشغيل في المتصفح).
من بين جميع أرقام الهواتف الشائعة التي تستخدم libphonenumber
الخاص بـ Google (أو تقليده)، فإن هذا الرقم فقط، google-libphonenumber
و libphonenumber-js
يحتوي على ملفات README مناسبة مع أمثلة. ربما تغير هذا منذ القيام بهذه المعايير لأول مرة .
يجب أن تكون المكتبة سريعة التحميل ( require()
) وسريعة التحليل في المرة الأولى وجميع المرات المتتالية. لا ينبغي أن يؤدي ذلك إلى تضخم node_modules
الخاصة بك، ويجب أن يكون لها مساحة صغيرة من الذاكرة، إن أمكن.
ما يلي هو نتيجة برنامج اختبار يقوم بتحميل المكتبة، ثم تحليل رقم الهاتف، ثم مرة أخرى. يتم استدعاؤه 100 مرة لكل مكتبة ويتم عرض القيم المتوسطة هنا. قد يكون تحليل رقم الهاتف للمرة الأولى أبطأ بسبب تجميع/تحسين التعبيرات العادية وما إلى ذلك. سيؤدي تحليل رقم الهاتف مرة ثانية إلى إظهار سرعة كل عمليات التحليل المستقبلية ضمن هذه العملية.
فعل | رقم هاتف رائع 2.56.0 (ليب 8.12.29) | google-libphonenumber 3.2.22 (ليب 8.12.27) | libphonenumber-js 1.9.23 (ليب -) |
---|---|---|---|
تحميل المكتبة لأول مرة | 11.0 مللي ثانية ✅ | 29.67 مللي ثانية | 32.87 مللي ثانية |
تحليل رقم الهاتف الأول | 4.3 مللي ثانية | 4.01 مللي ثانية | 3.43 مللي ثانية ✅ |
⇒ تحميل + تحليل الرقم الأول | 15.3 مللي ثانية ✅ | 33.68 مللي ثانية | 36.3 مللي ثانية |
تحليل رقم الهاتف الثاني | 0.78 مللي ثانية ✅ | 0.97 مللي ثانية | 0.92 مللي ثانية |
زيادة استخدام الذاكرة | 5.12 م ✅ | 9.99 م | 5.86 م |
حجم العقدة_الوحداتية | 296 الف ✅ | 600 ك | 7.6 م |
ملفات العقدة_modules | 8 | 7 ✅ | 653 |
استيراد { parsePhoneNumber } من 'awesome-phonenumber'const pn = parsePhoneNumber( '0707123456', { RegionCode: 'SE' } );// أو على تنسيق e164:const pn = parsePhoneNumber( '+46707123456' );// pn is الآن نفس: const pn = {valid: true,number: {الإدخال: '0707123456'،e164: '+46707123456'، دولي: '+46 70 712 34 56'، وطني: '070-712 34 56'، rfc3966: 'الهاتف: +46-70-712-34-56 '،بارِز: '707123456'،}، الاحتمال: 'ممكن'، رمز المنطقة: 'SE'، ممكن: صحيح، قصير ممكن: خطأ، قصير صالح: خطأ، canBeInternationallyDialled: صحيح، النوع: 'mobile'، رمز البلد: 46، typeIsMobile: صحيح، typeIsFixedLine: false,};
نوع الإرجاع هو ParsedPhoneNumber
وهو إما ParsedPhoneNumberValid
أو ParsedPhoneNumberInvalid
. تحدد الخاصية valid
ما إذا كان التحليل ناجحًا أم لا، ومن ثم يتم إرجاع النوع.
تنسيق التحليل الناجح هو:
الواجهة ParsedPhoneNumberValid {valid: true;number: {input: string;international: string;national: string;e164: string;rfc3966: string;significant: string;};الاحتمالية: PhoneNumberPossibility; // اتحاد سلسلة، انظر أدناه رمز المنطقة: سلسلة؛ ممكن: منطقي؛ قصير ممكن: منطقي؛ قصير صالح: منطقي؛ canBeInternationallyDialled: منطقي؛ النوع: PhoneNumberTypes؛ // اتحاد سلسلة، انظر أدناهcountryCode: number;typeIsMobile: boolean;typeIsFixedLine: boolean;}
إذا فشل تحليل الرقم، أو كان هناك خطأ آخر، فإن نوع الإرجاع هو:
واجهة ParsedPhoneNumberInvalid {صالح: خطأ؛ ممكن: خطأ؛ احتمال: "غير صالح"؛ قصير ممكن: منطقي؛ قصير صالح: منطقي؛ خطأ؟: غير معروف؛}؛
لاحظ أن رقم الهاتف غير الصحيح (غير الصالح) من الممكن أن يظل رقمًا قصيرًا صالحًا للمنطقة المحددة.
استيراد {parsePhoneNumber,findNumbers,getNumberFrom,getExample,getCountryCodeForRegionCode,getRegionCodeForCountryCode,getSupportedCallingCodes,getSupportedRegionCodes,getAsYouType,} من "رقم هاتف رائع"
parsePhoneNumber( phoneNumber, { regionCode: string } )
يوزع رقم الهاتف كما هو موضح أعلاه.
الوسيطة الأولى هي رقم الهاتف المراد تحليله، سواء على المستوى الوطني أو الدولي (e164، أي مسبوقًا بـ +
). إذا كان النموذج وطنيًا ، فيجب أن تحتوي الوسيطة الثانية على خاصية سلسلة regionCode
، على سبيل المثال "SE" للسويد، و"CH" لسويسرا، وما إلى ذلك.
للعثور على (استخراج) أرقام الهواتف في النص، استخدم findNumbers( )
:
import { findNumbers } from 'awesome-phonenumber'const text = 'رقمي هو +46 707 123 456، وإلا اتصل بـ +33777777777.';const number = findNumbers( text );
قائمة الأرقام التي يتم إرجاعها تكون من نوع PhoneNumberMatch
مثل:
واجهة PhoneNumberMatch {نص: سلسلة؛ // السلسلة الأولية FoundphoneNumber: object; // نفس نتيجة parsePhoneNumber()start: number; // ابدأ الإزاحة في نهاية النص: الرقم؛ // نهاية الإزاحة في النص}
يمكن توفير وسيطة الخيارات الثانية لـ findNumbers( text, options )
في النموذج:
واجهة FindNumbersOptions{defaultRegionCode?: string;leniency?: FindNumbersLeniency;maxTries?: number;}
حيث FindNumbersLeniency
هو تعداد لـ 'valid'
أو 'possible'
. الإعداد الافتراضي هو 'valid'
مما يعني أنه تم العثور على أرقام هواتف صالحة فقط. إذا تم ضبط هذا على 'possible'
فسيتم أيضًا العثور على أرقام هواتف محتملة (ولكنها غير صالحة).
يمكن تعيين defaultRegionCode
(على سبيل المثال إلى 'SE'
للسويد)، وفي هذه الحالة سيتم العثور على أرقام الهواتف في النموذج الوطني (أي بدون +
بادئة)، طالما أنها من تلك المنطقة.
بالنسبة للنصوص الكبيرة جدًا، سيقوم maxTries
بتعيين الحد الأقصى لعدد أرقام الهواتف التي سيتم محاولة العثور عليها (ليس من الضروري العثور عليها فعليًا).
import { parsePhoneNumber, getNumberFrom } from 'awesome-phonenumber'const pn = parsePhoneNumber( '0707654321', { RegionCode: 'SE' } );if ( pn.valid ) {const fromJp = getNumberFrom( pn, 'JP' );/ / fromJp هو الرقم المطلوب الاتصال به من اليابان:fromJp.number === "010 46 70 765 43 21";}
القيمة المرجعة من getNumberFrom
هي PhoneNumberFrom
والتي تكون إما PhoneNumberFromValid
أو PhoneNumberFromInvalid
.
يتم تعريف PhoneNumberFromValid
على النحو التالي:
واجهة PhoneNumberFromValid {valid: true;number: string;}
يتم تعريف PhoneNumberFromInvalid
على النحو التالي:
واجهة PhoneNumberFromInvalid{valid: false;error?: غير معروف;}
في بعض الأحيان تريد عرض مثال لرقم هاتف منسق لبلد معين (وربما أيضًا نوع معين من رقم الهاتف). يتم استخدام وظيفة getExample
لهذا الغرض.
استيراد { getExample } من 'awesome-phonenumber'getExample( RegionCode[, phoneNumberType] ); // رقم الهاتف الذي تم تحليله
phoneNumberType
هو أي من الأنواع المحددة أعلاه.
import { getExample } from 'awesome-phonenumber'// احصل على مثال لرقم هاتف سويديconst example = getExample( 'SE' ); // A ParsedPhoneNumberValidconst exampleMobile = getExample( 'SE', 'mobile' ); // A ParsedPhoneNumberValidexample.number.e164; // على سبيل المثال "+468123456"exampleMobile.number.e164; // على سبيل المثال "+46701234567"exampleMobile.number.national; // على سبيل المثال "070 123 45 67"
توجد وظائف تحويل بين رموز المنطقة المكونة من حرفين ISO 3166-1 (على سبيل المثال "SE" للسويد) ورموز الاتصال الخاصة بالبلد المقابلة.
import {getCountryCodeForRegionCode,getRegionCodeForCountryCode,getSupportedCallingCodes,getSupportedRegionCodes,} من 'awesome-phonenumber'getCountryCodeForRegionCode( RegionCode ); // -> CountryCodegetRegionCodeForCountryCode(countryCode); // -> رمز المنطقة
getCountryCodeForRegionCode( 'SE' ); // -> 46getRegionCodeForCountryCode( 46 ); // -> "SE"
getSupportedCallingCodes() ; // -> [رموز الاتصال...]
getSupportedRegionCodes() ; // -> [رموز المنطقة...]
تتكون واجهة برمجة التطبيقات (API) من فئة PhoneNumber
التي تستخدم أحيانًا التعدادات . هذه هي:
اكتب PhoneNumberTypes =| 'الخط الثابت'| 'خط ثابت أو جوال'| 'الجوال'| 'بيجر'| 'رقم شخصي'| 'سعر القسط'| 'تكلفة مشتركة'| "مجاني"| 'وان'| 'الصوت عبر بروتوكول الإنترنت'| 'مجهول'
اكتب PhoneNumberPossibility =| 'ممكن'| 'رمز البلد غير صالح'| 'طويلة جدًا'| 'قصير جدًا'| 'مجهول'
'دولي''e164''rfc3966''مهم''
يمكنك إنشاء فئة AsYouType
باستخدام getAsYouType()
لتنسيق رقم الهاتف أثناء كتابته.
استيراد { getAsYouType } من 'awesome-phonenumber'const ayt = getAsYouType( 'SE' );
يحتوي مثيل الفئة التي تم إرجاعها على الطرق التالية
// أضف حرفًا إلى نهاية numberayt.addChar( nextChar: string );// احصل على الرقم المنسق الحاليayt.number( );// قم بإزالة الحرف الأخيرayt.removeChar( );// استبدل الرقم الصحيح بحرف رقم جديد (أو رقم فارغ إذا لم يكن محددًا)ayt.reset( number?: string );// احصل على كائن ParsedPhoneNumber الذي يمثل الرقم الحاليayt.getPhoneNumber( );
تقوم جميع الوظائف المذكورة أعلاه باستثناء getPhoneNumber( )
بإرجاع الرقم المنسق الحالي كسلسلة.
import { getAsYouType } from 'awesome-phonenumber'const ayt = getAsYouType( 'SE' );ayt.addChar( '0' ); // -> '0'ayt.addChar( '7' ); // -> '07'ayt.addChar( '0' ); // -> '070'ayt.addChar( '7' ); // -> '070 7'ayt.addChar( '1' ); // -> '070 71'ayt.addChar( '2' ); // -> '070 712'ayt.addChar( '3' ); // -> '070 712 3'ayt.addChar( '4' ); // -> '070 712 34'ayt.addChar( '5' ); // -> '070 712 34 5'ayt.addChar( '6' ); // -> '070 712 34 56'ayt.removeChar() ; // -> '070 712 34 5'ayt.addChar( '7' ); // -> '070 712 34 57'