0~9の数字のみを受け付け、それ以外は受け付けない正規表現が必要です。アルファベットや文字は使えません。
これは使えると思いました。
^[0-9]
あるいは
\d+
しかし、これらは文字を受け入れています。^, $,(,), など
上記の正規表現で解決できると思っていたのですが、なぜこのような文字を受け入れてしまうのかわかりません。
EDIT:
これはまさに私がやっていることです。
private void OnTextChanged(object sender, EventArgs e)
{
if (!System.Text.RegularExpressions.Regex.IsMatch("^[0-9]", textbox.Text))
{
textbox.Text = string.Empty;
}
}
これは上で述べたキャラクターを許可しています。
正規表現 ^[0-9]
は、"1A"のような文字列を含む、数字で始まる*ものにマッチします。部分一致を避けるには、最後に $
を追加します。
^[0-9]*$
これは、ゼロを含む任意の数の数字を受け入れます。1桁以上の数字を受け付けるには、*
を+
に変更します。正確に1桁の数字を受け付けるには、*
を取り除くだけです。
UPDATE: IsMatch
の引数を間違えています。パターンは第一引数ではなく、第二引数でなければなりません。
if (!System.Text.RegularExpressions.Regex.IsMatch(textbox.Text, "^[0-9]*$"))
注意: JavaScriptでは、d`は
[0-9]と同等ですが、.NETでは、``d
はデフォルトで、႒(ミャンマーの2)や߉(N'Koの9)のようなエキゾチックなものを含む、あらゆるUnicode decimal digitにマッチします。アプリがこれらの文字を扱う準備をしていないのであれば、[0-9]
で我慢してください (あるいは RegexOptions.ECMAScript フラグを指定してください)。