20

電話番号を一意の識別子として使用しているシステムがあります。このため、正規化された形式を使用して、すべての電話番号をフォーマットします。ソースデータを制御できないため、DBに追加する前に、これらの数値を自分で解析してフォーマットする必要があります。

電話番号を読み取って正規化された電話フォーマットを出力できるパーサーを作成しようとしていますが、その前に、電話番号のフォーマットに使用できる既存のライブラリを誰かが知っているかどうか疑問に思いました。

そこに既存のライブラリがない場合、この機能を作成するときに、明白ではない可能性があることを覚えておく必要がありますか?

現在、私のシステムは米国の番号のみを扱っていますが、必要になる可能性があるため、万が一の場合に備えて国際番号のサポートを含めるようにしています。

編集私はC#.NET2.0を使用していることを言及するのを忘れました。

4

5 に答える 5

25

libphonenumberGoogle から使用できます。ブログ投稿は次のとおりです。

http://blog.appharbor.com/2012/02/03/net-phone-number-validation-with-google-libphonenumber

数値の解析は、 NuGet パッケージをインストールしてからこれを行うのと同じくらい簡単です。

var util = PhoneNumberUtil.GetInstance();
var number = util.Parse("555-555-5555", "US");

次に、次のように数値をフォーマットできます。

util.Format(number, PhoneNumberFormat.E164);

libphonenumberE.164 以外のいくつかの形式をサポートしています。

于 2012-02-04T02:08:24.270 に答える
5

私は現在、完全にオープン ソースの携帯電話 (ハードウェアを含む) を開発しているOpenMokoプロジェクトに参加しています。電話番号の正規化に関しては、多くの問題がありました。誰かがまだ良い解決策を思いついたかどうかはわかりません。最大の問題は、米国の電話番号にあるようです。先頭に 1 が付いている場合とそうでない場合があるためです。連絡先リストに保存した内容によっては、発信者 ID 情報が正しく表示される場合と表示されない場合があります。電話番号の 1 を削除することをお勧めします (ただし、ほとんどの人は最初から入力しないと思いますが)。国際電話番号の前にあるプラス記号または国コードを探す必要がある場合もあります。

OpenMoko の Web サイト、メーリング リスト、およびソース管理を調べて、このバグがまだ解決されているかどうかを確認できます。

于 2008-11-03T15:55:54.023 に答える
2

perl と rails の例


http://validates-as-phone.googlecode.com/svn/trunk/README

http://www.perlmonks.org/?node_id=159645

于 2008-11-03T16:45:00.633 に答える
1

おそらく正規表現を使用して、数字以外のものをすべて取り除きます。[^\d]

唯一の例外は、内線番号を処理する場合、市外局番なしで3桁の内線番号を使用する番号を区別する場合、または国際番号を処理する必要がある場合です。

于 2008-11-03T15:40:16.083 に答える
0

必要なのは、すべての国コードのリストであり、文字列の最初の数文字を国コードのリストと照合して、それが正しいことを確認し、残りの数字が正しいことを確認し、すべての数字と、通常は 5 から変化する適切な長さであることを確認します。 10桁。

国コードとの照合を行うには、ウェブサイトwww.geonames.orgを使用するNGeoNames nugetをインストールして、国コードとの照合に使用するすべての国コードのリストを取得します。

于 2016-08-28T22:23:35.340 に答える