Identificar si una cadena es un número
Si tengo estas cadenas:
"abc"
=false
"123"
=true
"ab2"
=false
¿Existe algún comando, como IsNumeric()
u otro, que pueda identificar si una cadena es un número válido?
int n;
bool isNumeric = int.TryParse("123", out n);
Actualización a partir de C# 7:
var isNumeric = int.TryParse("123", out int n);
o si no necesita el número puede descartar el parámetro de salida
var isNumeric = int.TryParse("123", out _);
¡ Las var s pueden ser reemplazadas por sus respectivos tipos!
Esto devolverá verdadero si input
son todos números. No sé si es mejor que TryParse
, pero funcionará.
Regex.IsMatch(input, @"^\d+$")
Si solo desea saber si tiene uno o más números mezclados con caracteres, omita ^
+
y $
.
Regex.IsMatch(input, @"\d")
Editar: En realidad, creo que es mejor que TryParse porque una cadena muy larga podría desbordar TryParse.
También puedes usar:
using System.Linq;
stringTest.All(char.IsDigit);
Volverá true
para todos los dígitos numéricos (no float
) y false
si la cadena de entrada es algún tipo de alfanumérico.
Caso de prueba | Valor de retorno | Resultado de la prueba |
---|---|---|
"1234" |
verdadero | ✅Pase |
"1" |
verdadero | ✅Pase |
"0" |
verdadero | ✅Pase |
"" |
verdadero | ⚠️Falla (caso límite conocido) |
"12.34" |
FALSO | ✅Pase |
"+1234" |
FALSO | ✅Pase |
"-13" |
FALSO | ✅Pase |
"3E14" |
FALSO | ✅Pase |
"0x10" |
FALSO | ✅Pase |
Tenga en cuenta : stringTest
no debe ser una cadena vacía ya que pasaría la prueba de ser numérica.
He usado esta función varias veces:
public static bool IsNumeric(object Expression)
{
double retNum;
bool isNum = Double.TryParse(Convert.ToString(Expression), System.Globalization.NumberStyles.Any, System.Globalization.NumberFormatInfo.InvariantInfo, out retNum);
return isNum;
}
Pero también puedes usar;
bool b1 = Microsoft.VisualBasic.Information.IsNumeric("1"); //true
bool b2 = Microsoft.VisualBasic.Information.IsNumeric("1aa"); // false
De la evaluación comparativa de opciones IsNumeric
(fuente: aspalliance.com )
(fuente: aspalliance.com )