2012-04-17 51 views
3

私は電話番号をクリーンアップし、有効な電話番号に変換する正規表現を持っています:+1 123-1223。正規表現の電話番号と電話番号

正規表現:

Regex.Replace(phone, @"^\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*$", "+1 $1$2$3-$4$5$6-$7$8$9$10"); 

しかし、私はそう12個の数字を超えるものは拡張機能として、残りの数字を追加することになり、それに上の追加したいと思います。したがって、数値が810.232.122323の場合、+1 810-232-1223 x23になります。

これは正規表現を変更することで可能ですか?これを行う良い方法はありますか?私は正規表現をよく知っていません。ありがとう!

答えて

2

ただ、最後にこれを追加し、それはあなたの11グループになります(それは実際に2桁以上

(\d{2,}) 

を持っていない限り、それはコードがされる拡張子をピックアップしません。

Regex.Replace(phone, 
    @"^\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d{2,})$", 
    "+1 $1$2$3-$4$5$6-$7$8$9$10 Ext $11"); 

(\d{2,})? 

それはまだあなたの電話番号と一致しますが、WIL:これはオプションにする場合

、その後、これを行いますそう、lは、その後、あなたがこのようなMatchEvaluator

何かを使用する必要があり、これはオプションでも内線を使用しないようにするには上記の意志

などの拡張子を強制しない(しかし、私は私の目の前でコンパイラを持っていけません少し離れている可能性があり、テストする必要があります)

Regex.Replace(phone, 
    @"^\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d{2,})$", 
    "+1 $1$2$3-$4$5$6-$7$8$9$10 Ext $11"); 
    match => 
    { 
     var returnVal = "+1 "; 
     for(int i = 1; i <= 3; i++) 
     { 
      returnVal += match.Groups[i].Value; 
      if(i == 3 || i == 6) 
       returnVal += "-"; 
     } 
     returnVal += match.Groups[11].Success ? " Ext " + match.Groups[11] : "") 
     return returnVal; 
    } 
) 
+0

甘い!ありがとう!! –

+0

@Justin拡張子がオプションの場合に追加しました。ちょうどそれが有用かもしれないと思った:) –

+0

恐ろしいおかげで!それは非常にいいです。オプションでExtを非表示にすることは可能ですか?Ext(この場合は空白)のようには見えませんか? –

関連する問題