2012-03-14 12 views
2

私は、比較する値を取る汎用正規表現バリデーターを作成し、一致するかどうかをtrueまたはfalseで返します。バリデータはカスタムコントロールに関連付けられているため、入力はプロパティから自動的に取得されます。私は正規表現内の文字列の置換のための構文を持っている場合は知っていると思います。私はRegex.Replaceメソッドの使用を意味するものではなく、実際の正規表現をテキストを何か他のものに置き換えるメカニズムとして使用することを意味します。私が行うことができますこの方法:.NETでregexを使用して文字列を置換する

return Regex.IsMatch(control.Text, "some regex with replacement logic built in"); 

具体的には私はすべての数値以外の値を削除し、それが文字の数の範囲内だことを確認する私の正規表現をしたいと思います。

+0

数値以外の値を置き換えているのですか、それとも単に削除していますか? – Jetti

+0

私はただそれらを取り除いています –

+0

あなたは1ライナーが好きですが、問題は2行が必要なようなものです。これは、最初にregex.replaceを使用して数字以外の文字を削除し、次にすべての数字を一致させることができればあまりにも悪くないようです。表現。あなたは、おそらく、マスクされたテキストボックスを使用し、多くの問題を保存するためにあなたのUIを切り替えることができます。 – djdanlib

答えて

3

「MatchEvaluator Delegate」がここで助けになるかもしれませんが、明示的に要求したものではありません。見てみましょう...

Regex.Replaceには、一致ごとに呼び出されるMatchEvaluatorデリゲートをとるオーバーロードがあります。これにより、正規表現の構文が十分に表現できない場合に、C#コードで置換文字列の内容を委譲することができます。たとえば、

Console.WriteLine(Regex.Replace("5 is less than 10", @"\d+", 
    m => (int.Parse(m.Value) * 10).ToString())); 

出力に「5が100未満」と指定します。これはここでは適切かもしれませんが、一般的な置換タイプを提供する必要があります。

こちらがお役に立てば幸いです。

関連する問題