12

十分にテストされた正規表現(.netスタイルを推奨)、またはUSA /CAの電話番号をコンポーネントパーツに解析するその他の簡単なコードが必要です。

  • 3035551234122
  • 1-303-555-1234x122
  • (303)555-1234-122
  • 1(303)555 -1234-122

等...

すべて解析します:

  • AreaCode:303
  • 交換:555
  • 接尾辞:1234
  • 内線:122
4

6 に答える 6

21

これまでに与えられた答えはどれも私にとって十分に堅牢ではなかったので、より良いものを探し続け、それを見つけました:

電話番号を扱うための Google のライブラリ

あなたにも役立つことを願っています。

于 2011-07-15T11:41:28.843 に答える
3

This is the one I use:

^(?:(?:[\+]?(?<CountryCode>[\d]{1,3}(?:[ ]+|[\-.])))?[(]?(?<AreaCode>[\d]{3})[\-/)]?(?:[ ]+)?)?(?<Number>[a-zA-Z2-9][a-zA-Z0-9 \-.]{6,})(?:(?:[ ]+|[xX]|(i:ext[\.]?)){1,2}(?<Ext>[\d]{1,5}))?$

I got it from RegexLib I believe.

于 2008-10-22T20:52:18.263 に答える
1

たとえば、GeoIP で使用される適切に作成されたライブラリを次に示します。

http://highway.to/geoip/numberparser.inc

于 2011-07-09T09:45:02.083 に答える
1

最初に数字ではないものを取り除きます。次に、すべての例を次のように縮小します。

/^1?(\d{3})(\d{3})(\d{4})(\d*)$/

すべての国コードをサポートするのは少し複雑ですが、同じ一般的なルールが適用されます。

于 2008-10-22T20:57:21.963 に答える
1

この正規表現は、例で必要に応じて正確に機能します。

Regex regexObj = new Regex(@"\(?(?<AreaCode>[0-9]{3})\)?[-. ]?(?<Exchange>[0-9]{3})[-. ]*?(?<Suffix>[0-9]{4})[-. x]?(?<Extension>[0-9]{3})");
Match matchResult = regexObj.Match("1 (303) 555 -1234-122");

// Now you have the results in groups 
matchResult.Groups["AreaCode"];
matchResult.Groups["Exchange"];
matchResult.Groups["Suffix"];
matchResult.Groups["Extension"];
于 2008-10-22T21:07:19.603 に答える
0

Z ディレクトリ (vettrasoft.com) が提供する、アメリカの電話番号向けの、目にやさしい方法を次に示します。

string_o s2, s1 = "888/872.7676";
z_fix_phone_number (s1, s2);
cout << s2.print();      // prints "+1 (888) 872-7676"
phone_number_o pho = s2;
pho.store_save();

最後の行は、データベース テーブル "phone_number" に番号を格納します。列の値: country_code = "1"、area_code = "888"、exchange = "872" など。

于 2013-05-31T19:23:20.303 に答える