十分にテストされた正規表現(.netスタイルを推奨)、またはUSA /CAの電話番号をコンポーネントパーツに解析するその他の簡単なコードが必要です。
- 3035551234122
- 1-303-555-1234x122
- (303)555-1234-122
- 1(303)555 -1234-122
等...
すべて解析します:
- AreaCode:303
- 交換:555
- 接尾辞:1234
- 内線:122
十分にテストされた正規表現(.netスタイルを推奨)、またはUSA /CAの電話番号をコンポーネントパーツに解析するその他の簡単なコードが必要です。
等...
すべて解析します:
これまでに与えられた答えはどれも私にとって十分に堅牢ではなかったので、より良いものを探し続け、それを見つけました:
あなたにも役立つことを願っています。
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.
たとえば、GeoIP で使用される適切に作成されたライブラリを次に示します。
最初に数字ではないものを取り除きます。次に、すべての例を次のように縮小します。
/^1?(\d{3})(\d{3})(\d{4})(\d*)$/
すべての国コードをサポートするのは少し複雑ですが、同じ一般的なルールが適用されます。
この正規表現は、例で必要に応じて正確に機能します。
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"];
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" など。