-2

14 までの長さの Number を受け入れるための正規表現を作成しようとしています。

以下のリンクから試してみました: https://stackoverflow.com/a/9967694/861995

しかし、同じ Regex.IsMatch 関数は、^ で始まり $ で終わる通常の正規表現を受け入れません。

これについて私を助けてください私は正規表現が初めてです

private void ChangedSellUp_KeyDown(object sender, KeyEventArgs e)
    {            
        string pattern = "^[0-9]*$";            
        Regex rx = new Regex(pattern);
        if (rx.IsMatch(ChangedSellUp.Text))
        {
            e.Handled = true;
        }
    }  

ここで ChangedSellup.Text はテキスト ボックスの値です。2 つの条件に基づいて値を制限しようとしています。

  1. その数値のみを受け入れる必要があり、長さは小数点まで 14 増加してはなりません。
  2. その後に小数点がある場合は、2 つの数字のみが許可されます。

例えば; 有効な値 - 14.23、12345678901234.23 無効な値 - 1.2344、12345678901234.3455

正規表現で私を助けてください??

4

2 に答える 2

1

正規表現を構築する最良の方法は、Regex Tester を使用することです。Cappucino と呼ばれるダウンロードできる非常に優れたものがあります。または Web のものを使用することもできます

次に、それは単に正規表現を構築するケースです。私はに対してテストしています12345678901234.00

\d数字の正規表現パターンであるものから始めると、予想される 16 個すべての一致が得られます。

1 つ以上+の短い a を追加すると、2 回一致し、\d+1234567890123400

範囲を 2 桁のみに制限すると、\d{2}8 組の数字が得られます。

a を追加するには、任意の数字に一致するパターン.として文字をエスケープする必要があるため、代わりにのみを使用して一致させます (これは数字のオプションの部分でした)。.\.\d{2}.00

1 から 14 までの範囲の数字をパターン マッチする場合、(メインの数字である)\d{1,14}マッチし、1234567890123400

これで、まとめることができます。小数点以下の部分は、0 回または 1 回のいずれかが必要であると言ってオプションにし{0,1}ます?

\d{1,14}(\.\d{2})?

これらに正しく一致する

12345678901234.00
123456.00
1
1234

行の開始と終了を一致させていないため、これらにも一致します

500.00USD
$1000
于 2013-08-21T11:27:16.873 に答える
0

あなたが望むことを行うRegex.IsMatchは次のとおりです。

Regex.IsMatch("12345678901234.12", @"^\d{1,14}(?:\.\d{1,2}){0,1}$")

その特定の正規表現は、小数点の前に最大14桁、小数点の後に1桁または2桁の数値用です(小数点以下全体はオプションです)

テストするのに適した場所は次のとおりです: http://regexhero.net/tester/

^ と $ について言及したので、それらを正規表現に含めました。これは、数値だけの行のみを解析します (したがって、たとえば、「 1234.12 」は IsMatch で true を返さず、「^」を削除するだけです)重要でない場合は「$」)。

正規表現のもう 1 つの優れたリソースは、http: //www.mikesdotnetting.com/Article/46/CSharp-Regular-Expressions-Cheat-Sheetです。

アップデート:

目標は、ユーザーがその正規表現を満たすもの以外をテキストボックスに書き込めないようにすることであるため、テキスト変更イベントでこれを行うことができます (KeyEventArg のキーをチャー)。したがって、必要なものを達成する最も簡単な方法は次のとおりです。

  private void TextBox1_TextChanged(object sender, TextChangedEventArgs e)
  {
     if (!Regex.IsMatch(TextBox1.Text, @"^\d{1,14}(?:\.\d{0,2}){0,1}$"))
     {
        TextBox1.Text = TextBox1.Text.Substring(0, TextBox1.Text.Length - e.Changes.Last().AddedLength);
        TextBox1.CaretIndex = TextBox1.Text.Length;
     }
  }

正規表現のわずかな変更に注意してください。数値の後にドットが続き、余分な桁はありません。これは、小数点以下の桁数を含む数値を書いているときに、これが発生する状態になるためです。たとえば、次のようになります。 「123」

于 2013-08-21T11:14:41.067 に答える