これはすでに尋ねられていると言う前に、私がすでにこれらをレビューしたことを知ってください:
電話番号を保存して解析する必要のあるプログラムに取り組んでいて、他のプログラムも電話番号を解析できるように、電話番号が標準形式で保存されていることを確認したいとします。
たとえば、次のすべてが同じ米国の電話番号の有効な表現であることがわかりました。
1234567
123-4567
123 4567
5551234567
(555) 1234567
555-1234567
555 123 4567
555-123-4567
(555)-123-4567
(555) 123-4567
(5) 123 4567
1-555-123-4567
(1) 555-123-4567
そして、さまざまな国がさまざまな方法で数値を表します。
55 1234 567 8901
55 12 3456 7890
55 123 456 7890
55 1234 567890
555 123 456
(55) 123 4567
5.555.123-45-67
ご覧のとおり、ユーザーが有効な電話番号を確認できる方法の数はほぼ無限です(ウィキペディアのページ 英国の電話番号 はほぼ100プリンターページの長さです)。データベース内のすべての番号を、普遍的に認識できる形式にする必要があります。私の知る限り、ISOには定義された形式がありません。 電話番号の標準的な表記法はありますか?
ISO規格はありませんが、ITU規格はあります。 E.123とE.164が必要です。
要約すると、すべての電話番号は+ CC MMMMMM ...で表されます。ここで、CCは国コードで1〜3桁であり、MMMMMM ...は市外局番(該当する場合)および加入者番号です。合計桁数は15を超えてはなりません。+は「ローカル国際ダイヤルプレフィックス」を意味します。
私自身の固定電話番号を使用していくつかの例を示します。
したがって、たとえば、ドイツにいる場合、番号+44 2087712924は00442087712924としてダイヤルされ、米国では011442087712924としてダイヤルされます。44はそれが英国の番号であることを意味し、2087712924はローカル部分です。
実際には、MMMMM ...の長い文字列は通常、読みやすくするために小さな部分に分割されます。それをどのように行うかは国によって異なります。私が与える例は通常+4420 87712924と書かれます。
国際ダイヤルを可能にする世界中のどこからでも使用できる上記の明確なE.123表現に加えて、各国には独自のローカルな番号表現方法もあり、いくつかはいくつかあります。番号の例は、020 8771 2924または(020)8771 2924と表記される場合があります。先頭の0は、厳密に言えば、市外局番(20)の一部ではなく、交換局への信号であり、「ローカルエリアの外に出てください」。非常にまれに、市外局番が省略され、番号が8771 2924と書き込まれます。これらのローカル表現はすべて、複数の国で有効な番号、または同じ国の複数の地域で有効な番号を表す可能性があるため、あいまいです。つまり、番号は常に国コードとともに保存する必要があり、理想的にはE.123表記で保存する必要があります。特に、電話番号は番号ではないことに注意してください。 05のような番号は5と同じです。電話番号05はnot5と同じではなく、ストレージシステムは番号から先行ゼロを取り除きます。電話番号をCHARまたはVARCHARとしてデータベースに保存します。
最後に、いくつかの奇妙な点。例の番号は、一部の愚かな人々によって0208 771 2924として書き込まれます。これはダイヤル可能ですが、市外局番であると想定して先頭の0208を削除すると、残りは市内番号として無効になります。また、電話システムが壊れている国[北米での睨み]には、完全にボンカーシステムがあり、一部の場所では、市内通話のために10桁すべてをダイヤルする必要があります、あなたがしてはいけない、1NNN NNN NNNNをダイヤルしなければならない場所、先頭を含めてはいけない場所など。そのようなすべての場合において、storing+ CC MMMMM ...としての数は正しいです。それを特定の場所のダイヤル可能な数字のシーケンスに変換する方法を理解するのは、実際に電話をかける人(またはそのダイヤルソフトウェア)次第です。
現地の国の基準はたくさんあります。私のプロジェクトの1つで、同じ問題が発生しました。解決:
例: