J'ai une chaîne comme celui-ciPour vérifier si la valeur de chaîne a une valeur numérique ou non en C#
chaîne str = « dfdsfdsf8fdfdfd9dfdfd4 »
Je dois vérifier si la chaîne contient le numéro en boucle à travers la tableau.
J'ai une chaîne comme celui-ciPour vérifier si la valeur de chaîne a une valeur numérique ou non en C#
chaîne str = « dfdsfdsf8fdfdfd9dfdfd4 »
Je dois vérifier si la chaîne contient le numéro en boucle à travers la tableau.
Qu'en est-il une expression régulière:
bool val = System.Text.RegularExpressions.Regex.IsMatch(str, @"\d");
Si vous êtes à la recherche d'une valeur entière, vous pouvez utiliser int.TryParse:
int result;
if (int.TryParse("123", out result))
{
Debug.WriteLine("Valid integer: " + result);
}
else
{
Debug.WriteLine("Not a valid integer");
}
Pour vérifier un nombre décimal, remplacez int.TryParse avec Decimal.TryParse. Consultez ce billet de blog et les commentaires "Why you should use TryParse() in C#" pour plus de détails.
Si vous avez besoin des nombres décimaux, vous pourriez également utiliser cette expression régulière:
return System.Text.RegularExpressions.Regex.IsMatch(
TextValue, @"^-?\d+([\.]{1}\d*)?$");
Et enfin une autre alternative (si vous n'êtes pas religieusement contre VB.NET), vous pouvez utiliser la méthode dans la espace de noms Microsoft.VisualBasic:
Microsoft.VisualBasic.Information.IsNumeric("abc");
Si vous êtes un drogué de LINQ comme moi, tu le ferais de cette façon
string s = "abc1def2ghi";
bool HasNumber = (from a in s.ToCharArray() where a >= '0' && a <= '9' select a).Count() > 0;
Bon Dieu, c'est hideux. Si je trouve cela dans une révision de code, je (a) l'exciserais; (b) vous excise. – endian
Le code n'est pas mauvais - sauf que vous devez utiliser "Any()" au lieu de "Count()> 0" - de cette façon vous court-circuitez et n'avez pas besoin d'évaluer le reste de la liste puisque vous savez frapper 'vrai' déjà. –
en C# 2.0, essayez ceci:
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 vous allez faire une boucle par la chaîne, NE PAS utiliser int.TryParse ... qui est trop lourd. Au lieu de cela, utilisez char.IsNumber();
exemple:
foreach (char c in myString)
if (char.IsNumber(c))
return true;
Au lieu d'utiliser la boucle, l'utilisation de l'expression régulière est une bonne option. – Shekhar
str.ToCharArray().Any(x => char.IsNumber(x));
Grâce à ['String.IEnumerable (Of Char) .GetEnumerator'] (http://msdn.microsoft.com/en-us/library/cc672334.aspx), vous n'avez même pas besoin du' .ToCharArray () 'car la chaîne est automatiquement convertie en énumérable de type char. – KyleMit
str.ToCharArray().Any(char.IsNumber)
'Any()' prend un prédicat, donc cela ne sera pas compilé. Aussi, cette réponse exacte était [déjà fournie par Kamal] (http: // stackoverflow.com/a/11145727/1366033) – KyleMit
En fait ce groupe de méthodes est un prédicat valide, donc il compile, et cette réponse n'est pas tout à fait la même chose que Kamals – andrewtatham
La combinaison des parties de réponse Kamals et réponses TriStar donner ...
str.Any(char.IsNumber)
que je pense est la façon la plus concise et facile à lire, au lieu d'une regex
Et aussi jeter un oeil à John M Gant répondre : http://stackoverflow.com/questions/894263/how-to-identify-if-string-contain-a-number –
merci, juste ce que je cherchais. – Mana