ไลบรารีนี้เป็น libphonenumber
ของ Google เวอร์ชันที่คอมไพล์ไว้ล่วงหน้า โดยมีอินเทอร์เฟซที่เรียบง่ายกว่าเล็กน้อย มันมีพื้นที่น้อยที่สุด - เป็นไลบรารี่ที่ใช้ libphonenumber ที่เล็กที่สุดบน npmjs และไม่มีการขึ้นต่อกัน
ต่างจาก libphonenumber ตรงที่มีฟังก์ชัน findNumbers( )
เพื่อค้นหาหมายเลขโทรศัพท์ในข้อความ
การพิมพ์ TypeScript มีให้ภายในแพ็คเกจ
ใช้ libphonenumber v8.13.47
เวอร์ชัน 3:
เปลี่ยน API (แม้ว่าจะมี ABI ที่เข้ากันได้แบบย้อนหลัง)
เพิ่มการส่งออก ESM
เวอร์ชัน 4:
อาร์กิวเมนต์ที่สองใน parsePhoneNumber
คือวัตถุ
ค่าที่ส่งคืนจะเหมือนกับ toJSON( )
บน v3
เช่น { regionCode: 'SE' }
แทนสตริงรหัสภูมิภาค
ไม่มีตัวสร้าง
ไม่มีฟังก์ชันบนวัตถุที่ส่งคืน
ไม่มีข้อผิดพลาดเกิดขึ้น
เปลี่ยน API ให้สะอาดขึ้นมาก
เข้ากันไม่ได้แบบย้อนหลัง แม้ว่าจะเป็น v3 ยกเว้น:
เวอร์ชัน 5:
ยกเลิกการรองรับ Node 12
เวอร์ชัน 6:
ยกเลิกการรองรับ Node 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 ม |
ขนาด node_modules | 296K ✅ | 600 ก | 7.6 ม |
ไฟล์ node_modules | 8 | 7 ✅ | 653 |
นำเข้า { parsePhoneNumber } จาก 'awesome-phonenumber'const pn = parsePhoneNumber( '0707123456', { RegionCode: 'SE' } );// หรือในรูปแบบ e164:const pn = parsePhoneNumber( '+46707123456' );// pn คือ ตอนนี้เหมือนกับ:const pn = {valid: จริง, หมายเลข: {อินพุต: '0707123456',e164: '+46707123456', ระหว่างประเทศ: '+46 70 712 34 56', แห่งชาติ: '070-712 34 56', rfc3966: 'tel:+46-70-712-34-56',สำคัญ: '707123456',},ความเป็นไปได้: 'เป็นไปได้',regionCode: 'SE',เป็นไปได้: true,shortPossible: false,shortValid: false,canBeInternationallyDialled : true,พิมพ์: 'mobile',countryCode: 46,typeIsMobile: จริง, typeIsFixedLine: เท็จ,};
ประเภทการส่งคืนคือ ParsedPhoneNumber
ซึ่งเป็น ParsedPhoneNumberValid
หรือ ParsedPhoneNumberInvalid
คุณสมบัติ valid
จะระบุว่าการแยกวิเคราะห์สำเร็จหรือไม่ ดังนั้นประเภทใดที่จะถูกส่งกลับ
รูปแบบของการแยกวิเคราะห์ที่ประสบความสำเร็จคือ:
อินเทอร์เฟซ ParsedPhoneNumberValid {valid: true;number: {input: string;international: string;national: string;e164: string;rfc3966: string;significant: string;};possibility: PhoneNumberPossibility; // การรวมสตริง ดูด้านล่างregionCode: string;possible: boolean;shortPossible: boolean;shortValid: boolean;canBeInternationallyDialled: boolean;type: PhoneNumberTypes; // การรวมสตริง โปรดดูด้านล่างcountryCode: number;typeIsMobile: boolean;typeIsFixedLine: boolean;}
หากแยกวิเคราะห์หมายเลขไม่สำเร็จ หรือมีข้อผิดพลาดอื่น ประเภทการส่งคืนจะเป็น:
อินเทอร์เฟซ ParsedPhoneNumberInvalid {ถูกต้อง: เท็จ; เป็นไปได้: เท็จ; ความเป็นไปได้: 'ไม่ถูกต้อง'; shortPossible: บูลีน; shortValid: บูลีน; ข้อผิดพลาด?: ไม่ทราบ;};
โปรดทราบว่าหมายเลขโทรศัพท์ที่ไม่ถูกต้อง (ไม่ถูกต้อง) ยังคงเป็น หมายเลขสั้น ที่ถูกต้องสำหรับภูมิภาคที่กำหนด
นำเข้า {parsePhoneNumber,findNumbers,getNumberFrom,getExample,getCountryCodeForRegionCode,getRegionCodeForCountryCode,getSupportedCallingCodes,getSupportedRegionCodes,getAsYouType,} จาก 'awesome-phonenumber'
parsePhoneNumber( phoneNumber, { regionCode: string } )
แยกวิเคราะห์หมายเลขโทรศัพท์ตามที่อธิบายไว้ข้างต้น
อาร์กิวเมนต์แรกคือหมายเลขโทรศัพท์ที่จะแยกวิเคราะห์ ทั้ง ในประเทศ หรือ ต่างประเทศ (e164 เช่น นำหน้าด้วยแบบฟอร์ม +
) หากเป็นรูปแบบ ของประเทศ อาร์กิวเมนต์ที่สองจำเป็นต้องมีคุณสมบัติสตริงของรหัส regionCode
เช่น 'SE' สำหรับสวีเดน 'CH' สำหรับสวิตเซอร์แลนด์ เป็นต้น
หากต้องการค้นหา (แยก) หมายเลขโทรศัพท์ในข้อความ ให้ใช้ findNumbers( )
:
import { findNumbers } จาก 'awesome-phonenumber'const text = 'หมายเลขของฉันคือ +46 707 123 456 หรือโทร +33777777777';const number = findNumbers( text );
รายการหมายเลขที่ส่งคืนเป็นประเภท PhoneNumberMatch
เช่น:
อินเทอร์เฟซ PhoneNumberMatch {ข้อความ: สตริง; // สตริงดิบ foundphoneNumber: object; // เช่นเดียวกับผลลัพธ์ของ parsePhoneNumber()start: number; // เริ่มต้นออฟเซ็ตใน textend: number; // สิ้นสุดการชดเชยในข้อความ}
อาร์กิวเมนต์ตัวเลือกที่สองสำหรับ findNumbers( text, options )
สามารถระบุได้ในแบบฟอร์ม:
อินเทอร์เฟซ FindNumbersOptions {defaultRegionCode?: string; leniency?: FindNumbersLeniency; maxTries?: number;}
โดยที่ FindNumbersLeniency
คือ enum ของ 'valid'
หรือ 'possible'
ค่าเริ่มต้นคือ 'valid'
ซึ่งหมายความว่าพบเฉพาะหมายเลขโทรศัพท์ที่ถูกต้องเท่านั้น หากตั้งค่าเป็น 'possible'
ก็จะพบหมายเลขโทรศัพท์ที่เป็นไปได้ (แต่ไม่ถูกต้อง)
คุณสามารถตั้ง defaultRegionCode
ได้ (เช่น 'SE'
สำหรับสวีเดน) ซึ่งในกรณีนี้จะพบหมายเลขโทรศัพท์ในรูปแบบ ประจำชาติ (เช่น ไม่มี +
นำหน้า) ตราบใดที่มาจากภูมิภาคนั้น
สำหรับข้อความที่มีขนาดใหญ่มาก maxTries
จะกำหนดจำนวนหมายเลขโทรศัพท์สูงสุดที่จะ ค้นหา (ไม่จำเป็นต้องค้นหาจริงๆ)
นำเข้า { parsePhoneNumber, getNumberFrom } จาก 'awesome-phonenumber'const pn = parsePhoneNumber( '0707654321', { RegionCode: 'SE' } );if ( pn.valid ) {const fromJp = getNumberFrom( pn, 'JP' );/ / fromJp คือหมายเลขที่จะโทรจาก Japan: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 } จาก 'awesome-phonenumber'// รับตัวอย่าง หมายเลขโทรศัพท์ภาษาสวีเดนconst example = getExample( 'SE' ); // A ParsedPhoneNumberValidconst exampleMobile = getExample( 'SE', 'mobile' ); // ParsedPhoneNumberValidexample.number.e164; // เช่น '+468123456'exampleMobile.number.e164; // เช่น '+46701234567'exampleMobile.number.national; // เช่น '070 123 45 67'
มีฟังก์ชันการแปลงระหว่างรหัสภูมิภาค ISO 3166-1 2 ตัวอักษร (เช่น 'SE' สำหรับสวีเดน) และรหัสโทรศัพท์ประเทศที่เกี่ยวข้อง
นำเข้า {getCountryCodeForRegionCode,getRegionCodeForCountryCode,getSupportedCallingCodes,getSupportedRegionCodes,} จาก 'awesome-phonenumber'getCountryCodeForRegionCode(regionCode ); // -> CountryCodegetRegionCodeForCountryCode (countryCode); // -> รหัสภูมิภาค
getCountryCodeForRegionCode( 'SE' ); // -> 46getRegionCodeForCountryCode (46); // -> 'SE'
getSupportedCallingCodes( ); // -> [ รหัสการโทร... ]
getSupportedRegionCodes( ); // -> [ รหัสภูมิภาค... ]
API ประกอบด้วยคลาส PhoneNumber
ซึ่งบางครั้งใช้ enums เหล่านี้คือ:
พิมพ์ PhoneNumberTypes =| 'โทรศัพท์พื้นฐาน'| 'โทรศัพท์พื้นฐานหรือมือถือ'| 'มือถือ'| 'เพจเจอร์'| 'หมายเลขประจำตัว'| 'อัตราพรีเมี่ยม'| 'ต้นทุนร่วม'| 'โทรฟรี'| 'อวน'| 'voip'| 'ไม่ทราบ'
พิมพ์ PhoneNumberPossibility =| 'เป็นไปได้'| 'รหัสประเทศไม่ถูกต้อง'| 'ยาวเกินไป'| 'สั้นเกินไป'| 'ไม่ทราบ'
'นานาชาติ' ระดับชาติ '' e164 '' rfc3966 '' สำคัญ'
คุณสามารถสร้างคลาส AsYouType
ด้วย getAsYouType()
เพื่อจัดรูปแบบหมายเลขโทรศัพท์ในขณะที่กำลังพิมพ์
นำเข้า { getAsYouType } จาก 'awesome-phonenumber'const ayt = getAsYouType( 'SE' );
อินสแตนซ์คลาสที่ส่งคืนมีวิธีการดังต่อไปนี้
// เพิ่มอักขระที่ส่วนท้ายของ numberayt.addChar( nextChar: string );// รับ numberayt.number ที่จัดรูปแบบปัจจุบัน ( );// ลบ characterayt.removeChar ตัวสุดท้าย ( );// แทนที่ตัวเลขทั้งหมดด้วย a หมายเลขใหม่ (หรือหมายเลขว่างหากไม่ได้กำหนด)ayt.reset( number?: string );// รับวัตถุ ParsedPhoneNumber ที่แสดงถึง numberayt.getPhoneNumber( );
ฟังก์ชันทั้งหมดข้างต้นยกเว้น getPhoneNumber( )
จะส่งคืนตัวเลขที่จัดรูปแบบปัจจุบันเป็นสตริง
นำเข้า { getAsYouType } จาก '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'