¿Cuál es la forma más eficiente de probar una cadena de entrada si contiene un valor numérico (o, por el contrario, no es un número)? Supongo que puedo usar Double.Parse
o una expresión regular (ver más abajo) pero me preguntaba si hay alguna forma integrada de hacer esto, como javascript NaN()
o IsNumeric()
(¿era VB, no puedo recordar?).
public static bool IsNumeric(this string value)
{
return Regex.IsMatch(value, "^\\d+$");
}
Respuestas:
Esto no tiene la sobrecarga de expresiones regulares
Por cierto, todos los tipos de datos estándar, con la flagrante excepción de los GUID, admiten TryParse.
update
secretwep mostró que el valor "2345" pasará la prueba anterior como un número. Sin embargo, si necesita asegurarse de que todos los caracteres dentro de la cadena sean dígitos, entonces debe tomar otro enfoque.
ejemplo 1 :
o si quieres ser un poco mas elegante
actualización 2 (de @stackonfire para tratar con cadenas nulas o vacías)
fuente
Number
objeto en Javascript es un flotante o un número entero, por lo que cambiar a doble. TryParse sería un equivalente más exactodouble
, pero muchos los considerarían no numéricos.public Boolean IsNumber(String s) { Boolean value = true; if (s == String.Empty || s == null) { value=false; } else { foreach(Char c in s.ToCharArray()) { value = value && Char.IsDigit(c); } } return value; }
Prefiero algo como esto, te permite decidir qué
NumberStyle
probar.fuente
Además de las respuestas correctas anteriores, probablemente valga la pena señalar que "No es un número" (NaN) en su uso general no es equivalente a una cadena que no puede evaluarse como un valor numérico. Por lo general, NaN se entiende como un valor numérico utilizado para representar el resultado de un cálculo "imposible", cuando el resultado no está definido. A este respecto, diría que el uso de Javascript es un poco engañoso. En C #, NaN se define como una propiedad de los tipos numéricos simple y doble y se usa para referirse explícitamente al resultado de bucear cero por cero. Otros lenguajes lo utilizan para representar diferentes valores "imposibles".
fuente
Sé que esto ha sido respondido de muchas maneras diferentes, con extensiones y ejemplos lambda, pero una combinación de ambos para la solución más simple.
o si está utilizando Visual Studio 2015 (C # 6.0 o superior), entonces
Impresionante C # 6 en una línea. Por supuesto, esto es limitado porque solo prueba solo caracteres numéricos.
Para usar, solo tenga una cadena y llame al método, como por ejemplo:
fuente
Sí, IsNumeric es VB. Por lo general, la gente usa el método TryParse (), aunque es un poco torpe. Como sugirió, siempre puede escribir el suyo.
fuente
Me gusta el método de extensión, pero no me gusta lanzar excepciones si es posible. Opté por un método de extensión que toma la mejor de 2 respuestas aquí.
fuente
Aún puede usar la función de Visual Basic en C #. Lo único que tienes que hacer es seguir mis instrucciones que se muestran a continuación:
Luego impórtelo en su clase como se muestra a continuación:
utilizando Microsoft.VisualBasic;
A continuación, utilícelo donde desee, como se muestra a continuación:
¡Espero que esto ayude y buena suerte!
fuente
VB tiene la
IsNumeric
función. Puede hacer referencia a élMicrosoft.VisualBasic.dll
y usarlo.fuente
Extensión simple:
fuente
fuente
Tal vez esta sea una característica de C # 3, pero podría usarla
double.NaN
.fuente
En realidad,
Double.NaN
es compatible con todas las versiones de .NET 2.0 y posteriores.fuente
Estuve usando el fragmento de Chris Lively (respuesta seleccionada) encapsulado en una función bool como la sugerencia de Gishu durante un año o dos. Lo usé para asegurarme de que ciertas cadenas de consulta fueran solo numéricas antes de continuar con el procesamiento posterior. Comencé a recibir algunas cadenas de consulta erróneas que la respuesta marcada no manejaba, específicamente, cada vez que se pasaba una coma después de un número como "3645" (devuelto verdadero). Este es el mod resultante:
fuente
Double.TryParse(s, NumberStyles.Float, CultureInfo.InvariantCulture, out myNum)
Tengo una versión ligeramente diferente que devuelve el número. Supongo que en la mayoría de los casos, después de probar la cadena, querrá usar el número.
fuente
Ésta es una versión modificada de la solución propuesta por el Sr. Siir. Encuentro que agregar un método de extensión es la mejor solución para la reutilización y la simplicidad en el método de llamada.
Modifiqué el cuerpo del método para que se ajustara a 2 líneas y eliminé la implementación innecesaria de .ToString (). Para aquellos que no están familiarizados con los métodos de extensión, aquí se explica cómo implementar:
Cree un archivo de clase llamado ExtensionMethods . Pega este código:
Reemplace YourNameSpaceHere con su NameSpace real. Guardar cambios. Ahora puede usar el método de extensión en cualquier lugar de su aplicación:
Nota: este método devolverá verdadero para enteros y decimales, pero devolverá falso si la cadena contiene una coma. Si desea aceptar la entrada con comas o símbolos como "$", sugeriría implementar un método para eliminar esos caracteres primero y luego probar si IsNumeric.
fuente