2010-11-30 22 views
4

非常に単純な正規表現に問題があります。.Net整数に制限する正規表現複数行正規表現

複数行のテキストボックス内のエントリを整数だけに制限したいとします。私が持っている正規表現は、単一行モード(複数行オプションを使用せずに単一行のTextBox用)ではうまく動作しますが、複数行モードではアルファ文字が詰まってしまいます。

私のコード(C#の)のようなものです:私は、次の例が有効になりたい

Regex regExpr = new Regex("^(\d*)$", RegexOptions.Multiline) 
return regExpr.IsMatch(testString); 

1 

1\\n 

1\\n2\\n3 

私は次のように無効な

A 

A1\\n2 

1\\n2\\nA3 

になりたいです前もって感謝します。

答えて

0

。あなただけの入力したテキストは、NON数字を持っていないことを確認するには、その後、

Regex regExpr = new Regex("[\D\S]", RegexOptions.Multiline) 

を使用して、それが一致した場合は、不法入国を持っています。

+0

それは私の入力を全く制限していないようです。開始マーカーと終了マーカーが欠けていますか? – Darren

+0

あなたは正しいです、私の間違いのために申し訳ありません。 ^(\\ d + \\ n *)+ $ – Nicolas

+0

これで問題は解決しません。それは私の元の表現と同じ問題である "A1 \ n2 \ n3"にマッチします。私は、この問題は多分、複数行の問題だと思う。私は正規表現にはあまり経験はありませんが、私の理論は、上記の行のうちの1つが有効なので、一致があります。 – Darren

0

alphasを破壊的に削除するか、情報を再入力するためにユーザーに返送しますか?

削除すると、空の結果で置き換えられます。

[^\d\n]

ページを提出し、ユーザーに送り返す数以外の何かがあるのか​​どうかを確認し、\ nは最初のオカレンスだけ誤差に同じことを行うことを確認します。

私はあなたが使用しているネットラングがわからないので、私は一般的な原則しか与えられません。これは、数字や改行の任意の数と一致します

Regex regExpr = new Regex("[\d\n]*", RegexOptions.Multiline) 

:あなたがして数字や改行を一致させることができます

(\d?\\n*)? 
+0

私はWPFアプリケーションでC#を使用しています。 IsMatch呼び出しの結果を返すだけです。私はそれに応じて私の質問を編集しました。 – Darren

1

について何

+0

こんにちはAndrew、私はこれらのどちらも私が達成したいことを達成しないと思います。1つ目は "A1 \ n2 \ n3"を許可し、2つ目は有効な "1 \ n2 \ n3"を許可しません。正規表現は異なる場合があります(例:10進エントリ​​またはIPアドレスエントリの検証など)。なぜなら、質問には必要なものの一部が詳細に記述されているためです。 – Darren

+0

最初の正規表現は、テキストボックスの数字と改行部分をキャプチャしようとしています。有効な入力のみを受け入れるようにしたい場合は、次のようにしてください: RegexOptionsをRegexOptions.Singlelineに変更して、 を変更し、正規表現を "^ [\ d \ n] * $"に変更してください。 これは文字列全体を一度に解析し、^と$は文字列の先頭と末尾に一致します。 – Andrew

+0

AndrewとNicolasの提案のおかげで、私はRegexOptions.Multilineを削除し、代わりに "(" ... "" \ n?)* "という1行の式を"ラップする "ことで問題を解決しました。 – Darren