このライブラリは、Google のlibphonenumber
のプリコンパイル済みバージョンで、インターフェースが若干単純になっています。これは最小のフットプリントを持ち、npmjs で利用可能な libphonenumber ベースのライブラリの中で断然最小であり、依存関係がありません。
libphonenumber とは異なり、テキスト内の電話番号を検索するfindNumbers( )
関数が含まれています。
TypeScript の型指定はパッケージ内で提供されます。
libphonenumber v8.13.47 を使用します
v3:
API を変更しました (ただし、下位互換性のある ABI はあります)
ESMエクスポートを追加しました
v4:
parsePhoneNumber
の 2 番目の引数はオブジェクトです
戻り値は v3 のtoJSON( )
と同様です
例: 地域コード文字列の代わりに{ regionCode: 'SE' }
コンストラクターがありません
返されたオブジェクトには関数がありません
エラーはスローされません
よりクリーンになるように API を変更しました
v3 と同様ですが、下位互換性はありませんが、以下の点を除きます。
v5:
Node 12 のサポートを終了
v6:
Node 16 のサポートを終了
v7:
テキスト内の電話番号を検索するためのfindNumbers( )
機能を追加しました
短い数字のサポートを追加しました
このライブラリは事前にコンパイルされているため、クロージャ コンパイラに依存せず、起動時にロードする必要がありません。これにより、ライブラリが高速になり、スペースが大幅に節約されます。また、このライブラリは、 webpack
プロジェクトで (またはブラウザーで実行する他の手段を使用して) 使用するのが簡単であることも意味します。
Google のlibphonenumber
使用している (またはそれを模倣している) 一般的な電話番号の中で、例を含むまともな README があるのは、このgoogle-libphonenumber
とlibphonenumber-js
だけです。これは、これらのベンチマークを最初に実行して以来変わっている可能性があります。
ライブラリは、ロード ( require()
) が迅速で、初回および連続した毎回の解析が迅速である必要があります。 node_modules
肥大化させるべきではなく、可能であればメモリ使用量を小さくする必要があります。
以下は、ライブラリをロードして電話番号を解析し、再度解析するテスト プログラムの結果です。各ライブラリに対して 100 回呼び出され、その平均値がここに表示されます。電話番号を初めて解析する場合、最初に正規表現などをコンパイル/最適化するため、時間がかかる可能性があります。電話番号を 2 回解析すると、そのプロセス内で今後行われる可能性のあるすべての解析の速度が表示されます。
アクション | 素晴らしい電話番号 2.56.0 (ライブラリ 8.12.29) | google-lib電話番号 3.2.22 (ライブラリ 8.12.27) | libphonenumber-js 1.9.23 (lib -) |
---|---|---|---|
ライブラリを初めてロードする | 11.0ミリ秒✅ | 29.67ミリ秒 | 32.87ミリ秒 |
最初の電話番号を解析する | 4.3ミリ秒 | 4.01ミリ秒 | 3.43ミリ秒✅ |
⇒ 最初の数値をロード + 解析する | 15.3ミリ秒✅ | 33.68ミリ秒 | 36.3ミリ秒 |
2 番目の電話番号を解析する | 0.78ミリ秒✅ | 0.97ミリ秒 | 0.92ミリ秒 |
メモリ使用量の増加 | 512万✅ | 999万 | 5.86メートル |
ノードモジュールのサイズ | 296K✅ | 600K | 7.6メートル |
node_modules ファイル | 8 | 7 ✅ | 653 |
import { parsePhoneNumber } from 'awesome-phonenumber'const pn = parsePhoneNumber( '0707123456', {regionCode: 'SE' } );// または e164 の場合 format:const pn = parsePhoneNumber( '+46707123456' );// pn は現在は次と同じです: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',可能性: true,shortPossible: false,shortValid: false,canBeInternationallyDialled: true,type: 'mobile',countryCode: 46,typeIsMobile: true, typeIsFixedLine: false,};
戻り値の型はParsedPhoneNumber
で、 ParsedPhoneNumberValid
またはParsedPhoneNumberInvalid
のいずれかです。 valid
プロパティは、解析が成功したかどうか、したがってどのタイプが返されるかを識別します。
成功した解析の形式は次のとおりです。
インターフェイス ParsedPhoneNumberValid {有効: true;数値: {入力: 文字列;国際: 文字列;国内: 文字列;e164: 文字列;rfc3966: 文字列;有意: 文字列;};可能性: PhoneNumberPossibility; // 文字列結合。以下を参照regionCode: string;possible: boolean;shortPossible: boolean;shortValid: boolean;canBeInternationallyDialled: boolean;type: PhoneNumberTypes; // 文字列結合。以下を参照countryCode:number;typeIsMobile:boolean;typeIsFixedLine:boolean;}
数値の解析に失敗した場合、または別のエラーが発生した場合、戻り値の型は次のようになります。
インターフェイス ParsedPhoneNumberInvalid {有効: false;可能性: false;可能性: '無効';shortPossible: ブール値;shortValid: ブール値;エラー?: 不明;};
間違った (無効な) 電話番号であっても、特定の地域では有効な短縮番号である可能性があることに注意してください。
import {parsePhoneNumber,findNumbers,getNumberFrom,getExample,get CountryCodeForRegionCode,getRegionCodeFor CountryCode,getSupportedCallingCodes,getSupportedRegionCodes,getAsYouType,} from 'awesome-phonenumber'
parsePhoneNumber( phoneNumber, { regionCode: string } )
上記のように電話番号を解析します。
最初の引数は、国内または国際(e164、つまり+
が接頭辞として付く) 形式で解析する電話番号です。各国形式の場合、2 番目の引数には、 regionCode
文字列プロパティ (スウェーデンの場合は「SE」、スイスの場合は「CH」など) を含める必要があります。
テキスト内の電話番号を検索 (抽出) するには、 findNumbers( )
を使用します。
import { findNumbers } from 'awesome-phonenumber'const text = '私の電話番号は +46 707 123 456 です。それ以外の場合は +33777777777 に電話してください。';constnumbers = findNumbers( text );
返される番号のリストは、次のようなPhoneNumberMatch
タイプです。
インターフェイス PhoneNumberMatch{テキスト: 文字列; // 生の文字列 foundphoneNumber: object; // parsePhoneNumber()start:number; の結果と同じ// テキスト内の開始オフセットend:number; // テキスト内の終了オフセット}
findNumbers( text, options )
の 2 番目のオプション引数は、次のフォームで指定できます。
インターフェース FindNumbersOptions{defaultRegionCode?: 文字列;leniency?: FindNumbersLeniency;maxTries?: 数値;}
ここで、 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
からの戻り値は、 PhoneNumberFromValid
またはPhoneNumberFromInvalid
のいずれかのPhoneNumberFrom
です。
PhoneNumberFromValid
は次のように定義されます。
インターフェイス PhoneNumberFromValid{有効: true;数値: 文字列;}
PhoneNumberFromInvalid
は次のように定義されます。
インターフェース PhoneNumberFromInvalid{有効: false;エラー?: 不明;}
場合によっては、特定の国の電話番号の例を書式設定して表示したいことがあります (場合によっては、特定の種類の電話番号も)。これにはgetExample
関数が使用されます。
import { getExample } from 'awesome-phonenumber'getExample(regionCode[,phoneNumberType] ); // 解析された電話番号
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」など) と、対応する国番号コードとの間の変換関数があります。
import {get CountryCodeForRegionCode,getRegionCodeFor CountryCode,getSupportedCallingCodes,getSupportedRegionCodes,} from 'awesome-phonenumber'get CountryCodeForRegionCode(regionCode); // -> countryCodegetRegionCodeFor CountryCode( countryCode ); // -> 地域コード
get CountryCodeForRegionCode( 'SE' ); // -> 46getRegionCodeFor CountryCode( 46 ); // -> 'SE'
getSupportedCallingCodes( ); // -> [ コードの呼び出し... ]
getSupportedRegionCodes(); // -> [地域コード...]
API は、 enum を使用することがあるPhoneNumber
クラスで構成されます。これらは:
タイプ PhoneNumberTypes =| '固定回線'| '固定回線または携帯電話'| 'モバイル'| 'ポケベル'| '個人番号'| 'プレミアム料金'| '共有コスト'| 'フリーダイヤル'| 'うあん'| 'ヴォイプ'| '未知'
type PhoneNumberPossibility =| '可能です'| '無効な国コード'| '長すぎます'| '短すぎる'| '未知'
「国際」「国家」e164「rfc3966」「重要」
getAsYouType()
を使用してAsYouType
クラスを作成し、入力時に電話番号を書式設定することができます。
import { getAsYouType } from 'awesome-phonenumber'const ayt = getAsYouType( 'SE' );
返されたクラスインスタンスには次のメソッドがあります
// 数値の末尾に文字を追加しますayt.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'