電話番号パーサー&フォーマッター

国際電話番号を解析・検証し、E.164・国際・国内の各形式に再整形します。

国際電話番号を解析・検証し、E.164・国際・国内の各形式に再整形します。 国際電話番号を解析・検証し、E.164・国際・国内の各形式に再整形します。

背景

電話番号の構造

国際電話番号は 3 つの論理部分からなります:国番号(北米 1、英国 44、中国 86、 日本 81 など)、国内有効番号(市外局番+加入者番号)、任意の内線番号です。 E.164 勧告は標準形を定義しています:先頭の +、国番号、区切りなしの国内番号 -- 例:+14155552671。ユーザーが自由形式で入力する番号にはスペース、ハイフン、 括弧、国内でのみ意味を持つ先頭の 0 が含まれることがあります。優れたパーサーは これらをすべて構造化フィールドに正規化します。

パースが見た目より難しい理由

国ごとにほぼ全てが異なります:国内番号の長さ、トランクプレフィックスの使用 (中国は海外発信時に先頭 0 を落とし、英国も同様)、携帯と固定のプレフィックス、 特殊短縮番号。4444 は国によって有効な国内番号にも無効にもなります。番号計画 は変化し続けます--ブラジルは 2016 年に全携帯番号へ 1 桁追加しました。だから 真面目なバリデータはハードコードされた正規表現ではなく完全なメタデータ データベースを持ちます。このページが使うライブラリは全国の公式 Google メタデータを同梱しており、例えば中国の携帯番号は 11 桁で 1 から始まることを 知っています。

パーサーの使い方

+ と国番号の有無どちらでも入力できます。国番号を省略する場合は、ドロップ ダウンでデフォルト国を選び、パーサーが国内形式を解決できるようにします。 ツールは E.164 形式、スペース入りの国際形式、国内形式、検出された国、国番号、 国内番号、有効かつ可能性があるか、番号タイプ(携帯、固定、フリーダイヤルなど)、 メタデータで判別できる場合は通信事業者を報告します。「可能性がある」(長さと プレフィックス形状が正しい)が「有効」(割り当て済みで構造が正しい)でない 場合もあります--両方のチェックを表示します。

実用的な注意点

素の番号からの国検出はヒューリスティックです:+1 555 2671 は北米を明確に 示しますが、短い番号は複数の国に一致し得ます。機械間利用では必ず国番号を 含め、データベースには E.164 形式で保存してください。ユーザー入力の検証では 即時 UX フィードバックに「可能性」チェックを、送信時には完全な「有効」 チェックを使うのが良いでしょう。このツールは同梱の libphonenumber-js(MIT) データで完全にブラウザ内で動作し、入力内容が送信されることはありません。

MIT ライセンスの libphonenumber-js ライブラリ(public/assets に同梱)を使用。解析はブラウザ内でローカルに実行されます。

よくある質問

「可能性はあるが有効ではない」のはなぜ?
「可能性」は番号が国の一般的な長さとプレフィックス形状に一致することを意味し、「有効」は公式メタデータ上で実際に割り当てられた番号であることを意味します。多くのテスト番号や未割当範囲は可能性はあるが有効ではありません。
E.164 とは何か、なぜ保存するのか?
E.164 は電話番号の ITU 標準です:+ 国番号 国内番号、最大 15 桁。この単一の標準形を保存すると、全土で曖昧さがないため重複排除や国際発信が簡単になります。
国番号なしで番号を検証できますか?
確実にはできません。国番号がないとパーサーは推測するしかなく、短い番号は多くの国で有効になり得ます。入力が明示的に国際形式でない限り、デフォルト国を指定(または国番号を必須)してください。
番号タイプはどうやって決まりますか?
同梱メタデータがプレフィックスで範囲を分類します:携帯、固定、フリーダイヤル、プレミアム、VoIP、共有コストなど。メタデータが割り当てた場合のみ表示され、それ以外はハイフンになります。
入力内容はどこかに送信されますか?
いいえ。解析・検証・整形はすべて同梱の libphonenumber-js(MIT)でブラウザ内で行われます。読み込み後は完全オフラインで動作します。
同じ番号なのに国によって形式が違うのはなぜ?
国際形式は各国の慣習で桁をグループ化します(フランスは 2 桁ずつ、米国は 3-3-4 など)。E.164 は常に同一で、変わるのは表示形式だけです。