このようなことを書いた経験から言えば、100% の信頼性で行うことは非常に困難です。これを行うための Java コードをいくつか作成しました。これは、私たちが持っているデータの処理にはかなり適していますが、すべての国に適用できるわけではありません。あなたが尋ねる必要がある質問は次のとおりです。
文字から数字へのマッピングは国間で一貫していますか? 米国ではこれが多く使用されますが (例: 1800-GOT-MILK)、オーストラリアでは、一例として、非常にまれです。あなたがする必要があるのは、問題の国が異なる場合に正しいマッピングを行っていることを確認することです (そうでない場合もあります)。異なるアルファベットを使用している国 (たとえば、ロシアのキリル文字と旧東部ブロックの国) がどの国で使用されているかはわかりません。
解決策が 100% ではないことを受け入れる必要があり、それを期待するべきではありません。「最善の推測」アプローチを取る必要があります。たとえば、1300 123 456 と同様に 132345 がオーストラリアで有効な電話番号であることを実際に知る方法はありませんが、これらは 13xx 番号の 2 つのパターンのみであり、海外から発信することはできません。
また、地域 (市外局番) を検証するかどうかを確認する必要があります。米国では、市外局番の 2 桁目が 1 または 0 であるシステムを使用していると思います。これは、以前はそうだったかもしれませんが、今でも当てはまるかどうかはわかりません。いずれにせよ、他の多くの国には別のルールがあります。オーストラリアでは、固定電話と携帯電話 (携帯電話) の有効な市外局番は 2 桁です (最初の数字は 0)。08、03、04 はすべて有効です。01ではありません。どのように対応していますか?あなたは__したいですか?
国は、何桁の数字を書いているかに関係なく、さまざまな規則を使用しています。「規範」以外のものを受け入れるかどうかを決定する必要があります。これらはすべてオーストラリアで一般的です。
- (02) 1234 5678
- 02 1234 5678
- 0411 123 123 (ただし、04 1112 3456 は見たことがない)
- 131 123
- 13 1123
- 131 123
- 1 300 123 123
- 1300 123 123
- 02-1234-5678
- 1300-234-234
- +44 78 1234 1234
- +44 (0)78 1234 1234
- +44-78-1234-1234
- +44-(0)78-1234-1234
- 0011 44 78 1234 1234 (0011 は標準の国際ダイヤル コードです)
- (44) 078 1234 1234 (一般的ではありません)
そして、それは私の頭のてっぺんから外れています。一国のために。たとえば、フランスでは、電話番号を数字のペア (12 34 56 78) で書き、そのように発音するのが一般的です。
un (1)、deux (2)、trois (3)、...
これは
douze (12)、trente-quatre (34)、...
そのレベルの文化の違いに対応したいですか?そうではないと思いますが、ルールを厳しくしすぎた場合に備えて、この質問は検討する価値があります。
また、電話番号に内線番号を追加する人もいます。おそらく「ext」または同様の略語です。あなたはそれに応えたいですか?
申し訳ありませんが、ここにコードはありません。自問する質問と考慮すべき問題のリストです。他の人が言ったように、一連の正規表現は上記の多くを行うことができますが、最終的に電話番号フィールドは (ほとんど) 一日の終わりに自由形式のテキストです.