2008-11-06 12 views

Répondre

31

Qu'en est-il une expression régulière:

bool val = System.Text.RegularExpressions.Regex.IsMatch(str, @"\d"); 
+0

Et aussi jeter un oeil à John M Gant répondre : http://stackoverflow.com/questions/894263/how-to-identify-if-string-contain-a-number –

+1

merci, juste ce que je cherchais. – Mana

9

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"); 
0

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; 
+0

Bon Dieu, c'est hideux. Si je trouve cela dans une révision de code, je (a) l'exciserais; (b) vous excise. – endian

+2

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à. –

0

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 
      } 
     } 
6

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; 
+0

Au lieu d'utiliser la boucle, l'utilisation de l'expression régulière est une bonne option. – Shekhar

4
str.ToCharArray().Any(x => char.IsNumber(x)); 
+1

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

0
str.ToCharArray().Any(char.IsNumber) 
+0

'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

+0

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

0

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

Questions connexes