web-dev-qa-db-fra.com

En C #, comment vérifier si une chaîne contient un entier?

Je veux juste savoir si une variable String contient un parsable valeur entière positive. Je ne veux PAS analyser la valeur pour le moment.

Actuellement je fais:

int parsedId;
if (
    (String.IsNullOrEmpty(myStringVariable) ||
    (!uint.TryParse(myStringVariable, out parsedId))
)
{//..show error message}

C'est moche - Comment être plus concis?

Remarque: Je connais les méthodes d'extension, mais je me demande s'il y a quelque chose de intégré.

32
Marcel

La réponse semble être juste non.

Bien qu'il existe de nombreuses autres bonnes réponses, elles cachent simplement la laideur (que je n'ai pas demandée) ou introduisent de nouveaux problèmes (cas Edge).

3
Marcel

Vous pouvez utiliser char.IsDigit :

     bool isIntString = "your string".All(char.IsDigit)

Renvoie true si la chaîne est un nombre

    bool containsInt = "your string".Any(char.IsDigit)

Renvoie true si la chaîne contient un chiffre

51
DGibbs

En supposant que vous souhaitez vérifier que tous les caractères de la chaîne sont des chiffres, vous pouvez utiliser la méthode d'extension Enumerable.All avec la méthode Char.IsDigit comme suit:

bool allCharactersInStringAreDigits = myStringVariable.All(char.IsDigit);
26
dtb

Peut-être que cela peut aider

string input = "hello123world";
bool isDigitPresent = input.Any(c => char.IsDigit(c));

réponse de msdn .

7
panako

Vous pouvez vérifier si la chaîne contient uniquement des nombres:

Regex.IsMatch(myStringVariable, @"^-?\d+$")

Mais le nombre peut être supérieur à Int32.MaxValue ou moins de Int32.MinValue - vous devez garder cela à l'esprit.

Une autre option - créer une méthode d'extension et y déplacer du code laid:

public static bool IsInteger(this string s)
{
   if (String.IsNullOrEmpty(s))
       return false;

   int i;
   return Int32.TryParse(s, out i);
}

Cela rendra votre code plus propre:

if (myStringVariable.IsInteger())
    // ...
5
Sergey Berezovskiy

Ce travail pour moi.

("your string goes here").All(char.IsDigit)
2
sarmad salik

Désolé, vous n'avez pas bien compris votre question. Alors quelque chose comme ça?

str.ToCharArray().Any(char.IsDigit);

Ou la valeur doit-elle être un entier complètement, sans aucune chaîne supplémentaire?

if(str.ToCharArray().All(char.IsDigit(c));
2
SBoss