3

電話番号をクリーンアップして有効な電話番号に変換する正規表現があります:+1123-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の場合、+ 1810-232-1223x23になります。

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

4

1 に答える 1

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,})?

それでもあなたの電話番号と一致しますが、上記のような延長を強制することはありません

これをオプションにしてExtを使用しないようにするには、Extを使用する必要があります。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;
     }
)
于 2012-04-17T15:34:49.290 に答える