這個函式庫是 Google 的libphonenumber
的預編譯版本,介面稍微簡單一些。它具有最小的佔用空間 - 是迄今為止 npmjs 上可用的最小的基於 libphonenumber 的庫,並且沒有依賴項。
與 libphonenumber 不同,它包含一個findNumbers( )
函數來尋找文字中的電話號碼。
包內提供了 TypeScript 類型。
使用 libphonenumber v8.13.47
v3:
更改了 API(儘管具有向後相容的 ABI)
新增了 ESM 導出
v4:
parsePhoneNumber
的第二個參數是一個對象
傳回值類似 v3 上的toJSON( )
例如{ regionCode: 'SE' }
而不是區域代碼字串
無構造函數
傳回的物件上沒有函數
沒有拋出錯誤
更改 API 使其更加簡潔
不向後相容,儘管與 v3 類似,但以下情況除外:
v5:
放棄 Node 12 支持
v6:
刪除了 Node 16 支持
v7:
新增了findNumbers( )
功能,用於在文字中尋找電話號碼
增加了對短號碼的支持
由於該庫是預編譯的,因此它不依賴閉包編譯器,並且不需要在啟動時載入它。這使得庫速度更快並節省大量空間。這也意味著這個函式庫在任何webpack
專案中使用都很簡單(或使用任何其他方式在瀏覽器中運行)。
在所有使用 Google 的libphonenumber
(或模仿它)的流行電話號碼中,只有google-libphonenumber
和libphonenumber-js
這一個具有不錯的自述文件和範例。自從第一次進行這些基準測試以來,情況可能已經改變了。
函式庫應該快速載入( require()
),快速解析第一次和所有連續時間。它不應該使您的node_modules
膨脹,並且如果可能的話,它應該具有較小的記憶體佔用量。
以下是測試程式的結果,程式載入庫,然後解析電話號碼,然後再次解析。每個庫被調用 100 次,平均值顯示在此。由於最初編譯/最佳化正規表示式等原因,第一次解析電話號碼可能會較慢。第二次解析電話號碼將顯示該過程中可能的所有未來解析的速度。
行動 | 很棒的電話號碼 2.56.0 (庫 8.12.29) | google-lib電話號碼 3.2.22 (lib 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.12M ✅ | 9.99米 | 5.86M |
節點模組大小 | 296K ✅ | 600K | 7.6M |
節點模組文件 | 8 | 7 ✅ | 第653章 |
import { parsePhoneNumber } from 'awesome-phonenumber' const pn = parsePhoneNumber( '0707123456', {regionCode: 'SE' } );// 或在e164 格式上:const pn = parsePhoneNumber(1+46707);是現在與:const pn = {valid: true,number: {input: '0707123456',e164: '+46707123456',international: '+46 70 712 34 56',national: '070-712 70 712 334969 : '電話:+46-70-712-34-56',重要: '707123456',},可能性: 'is-possible',regionCode: 'SE',可能: true,shortPossible: false,shortValid: false ,canBeInternationallyDialled: true,type: 'mobile',countryCode: 46,typeIsMobile: true,typeIsFixedLine: false,};
回傳類型是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:布林值;錯誤?
請注意,不正確(無效)的電話號碼仍然可以是給定區域的有效短號碼。
從 'awesome-phonenumber' 導入 {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,否則請撥打 +337777777777。 ';const Numbers = findNumbers( text );
傳回的號碼清單的類型為PhoneNumberMatch
例如:
介面PhoneNumberMatch{文字:字串; // 原始字串foundphoneNumber: object; // 與parsePhoneNumber()的結果相同start: number; // 文字中的起始偏移量: 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 = getNumberP( pn); / fromJp 是從日本撥打的號碼:fromJp.number === "010 46 70 765 43 21";}
getNumberFrom
的回傳值是PhoneNumberFrom
,它可以是PhoneNumberFromValid
或PhoneNumberFromInvalid
。
PhoneNumberFromValid
定義為:
介面 PhoneNumberFromValid{valid: true;number: string;}
PhoneNumberFromInvalid
定義為:
介面 PhoneNumberFromInvalid{有效:假;錯誤?
有時您想要顯示某個國家/地區的格式化範例電話號碼(也可能是某種類型的電話號碼)。 getExample
函數就是用於此目的。
import { getExample } from 'awesome-phonenumber'getExample( 區域代碼[, 電話號碼類型] ); // 解析後的電話號碼
phoneNumberType
是上面定義的任何類型。
import { getExample } from 'awesome-phonenumber'// 取得瑞典電話號碼範例 const example = getExample( 'SE' ); // 一個 ParsedPhoneNumberValidconst exampleMobile = getExample( 'SE', 'mobile' ); // 一個 ParsedPhoneNumberValidexample.number.e164; // 例如 '+468123456'exampleMobile.number.e164; // 例如 '+46701234567'exampleMobile.number.national; // 例如'070 123 45 67'
2 個字元的 ISO 3166-1 地區代碼(例如,瑞典的“SE”)和相應的國家/地區代碼之間存在轉換函數。
導入 {getCountryCodeForRegionCode,getRegionCodeForCountryCode,getSupportedCallingCodes,getSupportedRegionCodes,} from 'awesome-phonenumber'getCountryCodeForRegionCode(regionCode); // ->countryCodegetRegionCodeForCountryCode(countryCode); // -> 區域代碼
getCountryCodeForRegionCode( 'SE' ); // -> 46getRegionCodeForCountryCode( 46 ); // -> 'SE'
取得支援的呼叫代碼(); // -> [呼叫程式碼...]
getSupportedRegionCodes(); // -> [ 區域代碼... ]
該 API 由PhoneNumber
類別組成,該類別有時使用枚舉。這些都是:
類型 PhoneNumberTypes =| '固定電話'| 「固定電話或行動電話」| '移動'| '尋呼機'| '個人號碼'| '溢價'| '共享成本'| “免費”| 'uan'| '網路電話'| '未知'
輸入電話號碼可能性 =| '是可能的'| '無效國家代碼'| '太長'| '太短'| '未知'
'國際''國家''e164''rfc3966''重要'
您可以使用getAsYouType()
建立AsYouType
類,以在鍵入電話號碼時對其進行格式化。
import { getAsYouType } from 'awesome-phonenumber' const ayt = getAsYouType( 'SE' );
傳回的類別實例有以下方法
// 在數字末尾加上一個字元ayt.addChar( nextChar: string );// 取得目前格式化的數字ayt.number( );// 刪除最後一個字元ayt.removeChar( );// 將整個數字替換為new number (如果未定義則為空號碼)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'