4

ユーザーが検証せずに入力した電話番号のリストがあり、次のようになります。

 - 495) 995-0595
 - 105-6439
 - 095 268 8621
 - 324-51-44
 - 7 (495) 995-05-95
 - 7 495 995 05 95
 - 7 (495) 995-0595
 - +7 (495) 995-05-95
 - 7 (495)925-34-89
 - 7(495)9253489
 - 7(495)925-34-89
 - 74959950595

これらの数値をこの (ロシア語) 形式に変換したい: +X (XXX) XXX-XX-XX

正規表現を使用してそれを達成するチャンスはありますか?

4

5 に答える 5

3

うん、抽出&再フォーマット!

List<string> oldlist = new List<string>();
List<string> newlist = new List<string>();
foreach(string s in oldlist)
{
     if(s.Contains('(')) s = s.Replace('('), "");//etc
     newlist.Add(numFormat(s));
}

string prefix = "495";

string numFormat(string s)
{
     string my;
     if(s.Length == 7)
     {
         my = string.Format("+7 ({0}) {1} {2} {3}", prefix, s.substring(0,3), s.subtring(3,2), s.substring(5,2);
     }
     else if(s.length == 10)
     {
         my = string.Format("+7 ({0}) {1} {2} {3}", s.substring(0,3), s.substring(3,3), s.subtring(5,2), s.substring(7,2);        
     }
     //etc
     return my;
}

これは私の頭のすぐ上にあります...しかし、あなたはアイデアを得る

于 2012-06-26T08:25:35.830 に答える
2

これを通してあなたのリストを実行してください:

var strippedNumbers = new List<string>();
foreach (var num in listOfRussianNumbers.Select(x=>Regex.Replace(x, "[^0-9]", ""))) 
    strippedNumbers.Add(num.Length == 7?"7499"+num:num);

次に、 string.Format を使用して、希望どおりに印刷します

string.Format("+{0} ({1}) {2}-{3}-{4}", 
    num.Substring(0,1), 
    num.Substring(1,3),
num.Substring(4,3),
num.Substring(7,2),
num.Substring(9,2));
于 2012-06-26T06:53:10.550 に答える
1

私はあなたがこれをすべきだと思います

  1. 文字列に変換します。
  2. ループを使用して、数字のように見えないものをすべて削除します。これに使用できますChar.IsDigit()
  3. 次に、を使用して目的のフォーマットを実行しますstring.Substring()

これらの手順はすべて、文字列形式でのみ実行してください。

好き

string str = "495) 995-0595";
List<char> digits = new List<char>();

for (int i = 0; i < str.Length; i++)
{
    if(char.IsDigit(str[i]))
        digits.Add(str[i]);
}

str = new string(digits.ToArray());

str = "+" + str.Substring(0, 1) + " (" + str.Substring(1, 3) + ") " 
      + str.Substring(4, 2) + "-" + str.Substring(6, 2) + "-" + str.Substring(8);

これは私を返しました"+4 (959) 95-05-95"

于 2012-06-26T06:41:52.883 に答える
1

これは私が短期間で得ることができる最高のものです。

((\+?\d)\s?)?\(?(\d\d\d)\)?\s?(\d\d\d)(\s|-)?(\d\d)(\s|-)?(\d\d)

これにより、サンプルから太字が選択されます。

495) 995-0595
105-6439
095 268 8621
324-51-44
7 (495) 995-05-95
7 495 995 05 95
7 (495) 995-0595
+7 (495) 995-05-95
7 (495 ) )925-34-89
7(495)9253489
7(495)925-34-89
74959950595

一致しない文字列については、別のルーチンまたは手動処理で送信できます。

于 2012-06-26T06:53:37.720 に答える
0

そんな感じ:

(\d)? ?\(?(\d\d\d)?\)? *?(\d\d\d) *?-? *?(\d\d) *?-? *?(\d\d)
于 2012-06-26T06:46:15.730 に答える