net - En C#, ¿cómo verificar si una cadena contiene un entero?
string.indexof c# example (6)
Solo quiero saber si una variable String contiene un valor entero positivo analizable . No quiero analizar el valor en este momento.
Actualmente estoy haciendo:
int parsedId;
if (
(String.IsNullOrEmpty(myStringVariable) ||
(!uint.TryParse(myStringVariable, out parsedId))
)
{//..show error message}
Esto es feo - ¿Cómo ser más conciso?
Nota: sé sobre los métodos de extensión, pero me pregunto si hay algo incorporado.
La respuesta parece ser simplemente no.
Aunque hay muchas otras respuestas buenas, o bien simplemente ocultan la fealdad (que no pedí) o introducen nuevos problemas (casos extremos).
Lo siento, no conseguí tu pregunta. Entonces, ¿algo como esto?
str.ToCharArray().Any(char.IsDigit);
¿O el valor tiene que ser un entero completamente, sin ninguna cadena adicional?
if(str.ToCharArray().All(char.IsDigit(c));
Podrías usar char.IsDigit :
bool isIntString = "your string".All(char.IsDigit)
Devolverá true
si la cadena es un número
bool containsInt = "your string".Any(char.IsDigit)
Devolverá true
si la cadena contiene un dígito
Puede verificar si la cadena contiene solo números:
Regex.IsMatch(myStringVariable, @"^-?/d+$")
Pero el número puede ser más grande que Int32.MaxValue
o menor que Int32.MinValue
, debes tenerlo en cuenta.
Otra opción: crear un método de extensión y mover el código feo allí:
public static bool IsInteger(this string s)
{
if (String.IsNullOrEmpty(s))
return false;
int i;
return Int32.TryParse(s, out i);
}
Eso hará que tu código sea más limpio:
if (myStringVariable.IsInteger())
// ...
Suponiendo que desea comprobar que todos los caracteres de la cadena son dígitos, puede utilizar el Método de extensión Enumerable.All con el Método Char.IsDigit de la siguiente manera:
bool allCharactersInStringAreDigits = myStringVariable.All(char.IsDigit);
Tal vez esto pueda ayudar
string input = "hello123world";
bool isDigitPresent = input.Any(c => char.IsDigit(c));
respuesta de msdn .