Regex, который принимает только цифры (0-9) и символы NO

Мне нужен regex, который будет принимать только цифры от 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;
        }
    }

Это позволяет персонажам, о которых я говорил выше.

Комментарии к вопросу (5)
Решение

Ваш регекс ^[0-9] соответствует всему, что начинается с цифры, включая строки типа "1A". Чтобы избежать частичного совпадения, добавьте $ в конец:

^[0-9]*$

Здесь принимается любое количество цифр, включая ни одной. Чтобы принять одну или несколько цифр, замените * на +. Чтобы принять ровно одну цифру, просто удалите *.

UPDATE: Вы перепутали аргументы для IsMatch. Шаблон должен быть вторым аргументом, а не первым:

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

ЗАМЕЧАНИЕ: В JavaScript \d эквивалентен [0-9], но в .NET \d по умолчанию соответствует любой десятичной цифре Unicode, включая такие экзотические знаки, как ႒ (Мьянма 2) и ߉ (N'Ko 9). Если ваше приложение не готово работать с этими символами, используйте [0-9] (или установите флаг RegexOptions.ECMAScript).

Комментарии (9)