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.
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).