web-dev-qa-db-ja.com

数字(0-9)とNO文字だけを受け入れる正規表現

私は0から9までの数字だけを受け入れ、他には何も受け入れない正規表現が必要です。文字も文字もありません。

私はこれがうまくいくと思いました:

^[0-9]

あるいは

\d+

しかし、これらは文字を受け入れています:^、$、(、)など

私は上の両方の正規表現がトリックをするだろうと思いました、そして私はなぜそれらがそれらの文字を受け入れるのかわかりません。

編集:

これはまさに私がやっていることです:

 private void OnTextChanged(object sender, EventArgs e)
    {

   if (!System.Text.RegularExpressions.Regex.IsMatch("^[0-9]", textbox.Text))
        {
            textbox.Text = string.Empty;
        }
    }

これは私が上述した文字を許可しています。

119
mo alaz

あなたの正規表現^[0-9]は、 "1A"のような文字列を含めて、先頭と数字の何にでも一致します。部分一致を避けるには、最後に$を追加します。

^[0-9]*$

これには、なしを含め、任意の桁数を使用できます。 1桁以上の数字を受け入れるには、*+に変更します。ちょうど1桁を受け入れるには、*を削除するだけです。

UPDATE: IsMatchへの引数を混同しました。パターンは最初の引数ではなく、2番目の引数になります。

if (!System.Text.RegularExpressions.Regex.IsMatch(textbox.Text, "^[0-9]*$"))

注意: JavaScriptでは\d[0-9]と同等ですが、.NETでは、デフォルトで\dはすべての Unicode 10進数字 に一致します。 9)。アプリがこれらの文字を処理する準備ができていない限り、[0-9]を使用してください(または RegexOptions.ECMAScript フラグを指定してください)。

296
Michael Liu