Regex que sólo acepta números (0-9) y NO caracteres

Necesito un regex que acepte sólo dígitos del 0 al 9 y nada más. Ni letras, ni caracteres.

Pensé que esto podría funcionar:

^[0-9]

o incluso

\d+

pero estos aceptan los caracteres : ^,$,(,), etc

Pensé que los dos regexes anterior haría el truco y yo'no estoy seguro de por qué su aceptar esos caracteres.

EDITAR:

Esto es exactamente lo que estoy haciendo:

 private void OnTextChanged(object sender, EventArgs e)
    {

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

Esto es permitir que los personajes que he mencionado anteriormente.

Solución

Su regex ^[0-9] coincide con cualquier cosa que comience con un dígito, incluyendo cadenas como "1A". Para evitar una coincidencia parcial, añada un $ al final:

^[0-9]*$

Esto acepta cualquier número de dígitos, incluso ninguno. Para aceptar uno o más dígitos, cambie el * por +. Para aceptar exactamente un dígito, basta con eliminar el *.

Actualización: Has confundido los argumentos de IsMatch. El patrón debería ser el segundo argumento, no el primero:

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

CUIDADO: En JavaScript, \d es equivalente a [0-9], pero en .NET, \d por defecto coincide con cualquier dígito decimal Unicode, incluyendo tarifas exóticas como ႒ (Myanmar 2) y ߉ (N'Ko 9). A menos que su aplicación esté preparada para manejar estos caracteres, siga con [0-9] (o suministre la bandera RegexOptions.ECMAScript).

Comentarios (9)