estoy teniendo una cadena como estaPara comprobar si el valor de cadena tiene un valor numérico o no en C#
cadena str = "dfdsfdsf8fdfdfd9dfdfd4"
tengo que comprobar si la cadena contiene el número de bucle a través de la formación.
estoy teniendo una cadena como estaPara comprobar si el valor de cadena tiene un valor numérico o no en C#
cadena str = "dfdsfdsf8fdfdfd9dfdfd4"
tengo que comprobar si la cadena contiene el número de bucle a través de la formación.
¿Qué pasa con una expresión regular:
bool val = System.Text.RegularExpressions.Regex.IsMatch(str, @"\d");
Si están en busca de un valor entero que podría utilizar int.TryParse:
int result;
if (int.TryParse("123", out result))
{
Debug.WriteLine("Valid integer: " + result);
}
else
{
Debug.WriteLine("Not a valid integer");
}
para comprobar un número decimal, reemplace con int.TryParse Decimal.TryParse. Echa un vistazo a esta entrada de blog y comentarios "Why you should use TryParse() in C#" para más detalles.
Si necesita números decimales, se puede usar alternativamente, esta expresión regular:
return System.Text.RegularExpressions.Regex.IsMatch(
TextValue, @"^-?\d+([\.]{1}\d*)?$");
Y finalmente otra alternativa (si no está religiosamente contra VB.NET), se puede utilizar el método en el Microsoft.VisualBasic espacio de nombres:
Microsoft.VisualBasic.Information.IsNumeric("abc");
Si eres un adicto a LINQ como yo, lo haría de esta manera
string s = "abc1def2ghi";
bool HasNumber = (from a in s.ToCharArray() where a >= '0' && a <= '9' select a).Count() > 0;
Dios mío, eso es horrible. Si encuentro eso en una revisión del código, (a) lo suprimiría; (b) impuestos especiales. – endian
El código no está mal, excepto que debe usar "Any()" en lugar de "Count()> 0" - de esa manera se cortocircuita y no necesita evaluar el resto de la lista ya que sabe que tiene golpea "verdad" ya. –
en C# 2.0, intente esto:
string str = "dfdsfdsf8fdfdfd9dfdfd4";
for (int i = 0; i < str.Length; i++)
{
int result;
if (int.TryParse(str[i].ToString(), out result))
{
//element is a number
}
else
{
// not a number
}
}
Si usted va a recorrer la cadena, NO use int.TryParse ... eso es demasiado pesada. En su lugar, use char.IsNumber();
ejemplo:
foreach (char c in myString)
if (char.IsNumber(c))
return true;
En lugar de usar loop, el uso de expresiones regulares es una buena opción. – Shekhar
str.ToCharArray().Any(x => char.IsNumber(x));
Gracias a ['String.IEnumerable (Of Char) .GetEnumerator'] (http://msdn.microsoft.com/en-us/library/cc672334.aspx), en realidad ni siquiera necesita el' .ToCharArray () 'como la cadena se lanza automáticamente como un enumerable de tipo char. – KyleMit
str.ToCharArray().Any(char.IsNumber)
'Any()' toma un predicado, por lo que no se compilará. Además, esta respuesta exacta fue [ya provista por Kamal] (http: // stackoverflow.com/a/11145727/1366033) – KyleMit
En realidad, ese grupo de métodos es un predicado válido, por lo que se compila, y esta respuesta no es lo mismo que Kamals – andrewtatham
combinar partes de respuesta Kamals y respuestas Tristars dar ...
str.Any(char.IsNumber)
que creo que es la manera más concisa y fácil de leer, en vez de una expresión regular
Y también eche un vistazo a la respuesta de John M Gant : http://stackoverflow.com/questions/894263/how-to-identify-if-string-contain-a-number –
gracias, justo lo que estaba buscando. – Mana