Vérifier qu'une chaîne ne contient que des lettres en C#

J'ai une chaîne d'entrée et je veux vérifier qu'il contient:

  • seulement des lettres ou
  • seulement des lettres et des chiffres ou
  • seulement des lettres, des chiffres ou un trait de soulignement

Pour clarifier, j'ai 3 cas différents dans le code, chacun appelant une validation différente. Quel est le moyen le plus simple d'y parvenir en C#?

156
demandé sur p.campbell 2009-07-25 10:50:36

8 réponses

Seules les lettres:

Regex.IsMatch(input, @"^[a-zA-Z]+$");

Seules les lettres et les chiffres:

Regex.IsMatch(input, @"^[a-zA-Z0-9]+$");

Seules les lettres, les chiffres et le trait de soulignement:

Regex.IsMatch(input, @"^[a-zA-Z0-9_]+$");
238
répondu Philippe Leybaert 2009-07-25 06:57:29
bool result = input.All(Char.IsLetter);

bool result = input.All(Char.IsLetterOrDigit);

bool result = input.All(c=>Char.IsLetterOrDigit(c) || c=='_');
199
répondu Muhammad Hasan Khan 2009-07-25 07:32:25

Lettres seulement:

Regex.IsMatch(theString, @"^[\p{L}]+$");

Lettres et chiffres:

Regex.IsMatch(theString, @"^[\p{L}\p{N}]+$");

Lettres, chiffres et soulignement:

Regex.IsMatch(theString, @"^[\w]+$");

Notez que ces modèles correspondent également à des caractères internationaux (par opposition à l'utilisation de la construction a-z).

43
répondu Fredrik Mörk 2009-07-25 07:09:38

Pour ceux d'entre vous qui préfèrent ne pas aller avec Regex et qui sont sur le Framework. net 2.0 (AKA no LINQ):

Seules Les Lettres:

public static bool IsAllLetters(string s)
{
    foreach (char c in s)
    {
        if (!Char.IsLetter(c))
            return false;
    }
    return true;
}

Seuls Les Nombres:

    public static bool IsAllDigits(string s)
    {
        foreach (char c in s)
        {
            if (!Char.IsDigit(c))
                return false;
        }
        return true;
    }

Uniquement Des Chiffres Ou Des Lettres:

    public static bool IsAllLettersOrDigits(string s)
    {
        foreach (char c in s)
        {
            if (!Char.IsLetterOrDigit(c))
                return false;
        }
        return true;
    }

Seulement Des Chiffres Ou Des Lettres Ou Des Traits De Soulignement:

    public static bool IsAllLettersOrDigitsOrUnderscores(string s)
    {
        foreach (char c in s)
        {
            if (!Char.IsLetterOrDigit(c) && c != '_')
                return false;
        }
        return true;
    }
18
répondu ROFLwTIME 2012-05-18 20:26:11

Je pense que c'est un bon cas d'utiliser des Expressions régulières:

public bool IsAlpha(string input)
{
    return Regex.IsMatch(input, "^[a-zA-Z]+$");
}

public bool IsAlphaNumeric(string input)
{
    return Regex.IsMatch(input, "^[a-zA-Z0-9]+$");
}

public bool IsAlphaNumericWithUnderscore(string input)
{
    return Regex.IsMatch(input, "^[a-zA-Z0-9_]+$");
}
7
répondu CMS 2009-07-25 07:15:56

Vous pouvez faire une boucle sur les caractères de string et vérifier en utilisant la méthode Char IsLetter mais vous pouvez également faire une astuce en utilisant la méthode String IndexOfAny pour rechercher d'autres caractères qui ne sont pas supposés être dans la chaîne.

3
répondu Baget 2009-07-25 06:57:06

Itérer à travers les caractères de chaînes et utiliser les fonctions de 'Char' appelées 'IsLetter' et 'IsDigit'.

Si vous avez besoin de quelque chose de plus spécifique - utilisez la classe Regex.

1
répondu Arnis Lapsa 2009-07-25 06:58:31

Si vous êtes un débutant, vous pouvez prendre la référence de mon code .. ce que j'ai fait était de mettre un chèque pour que je ne puisse obtenir que les Alphabets et les espaces blancs! Vous pouvez répéter la boucle for après la deuxième instruction if pour valider à nouveau la chaîne

       bool check = false;

       Console.WriteLine("Please Enter the Name");
       name=Console.ReadLine();

       for (int i = 0; i < name.Length; i++)
       {
           if (name[i]>='a' && name[i]<='z' || name[i]==' ')
           {
               check = true;
           }
           else
           {
               check = false;
           }

       }

       if (check==false)
       {
           Console.WriteLine("Enter Valid Value");
           name = Console.ReadLine();
       }
1
répondu Khyzar Ishaq Kapoor 2014-02-23 14:08:17