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#?
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_]+$");
bool result = input.All(Char.IsLetter);
bool result = input.All(Char.IsLetterOrDigit);
bool result = input.All(c=>Char.IsLetterOrDigit(c) || c=='_');
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
).
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;
}
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_]+$");
}
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.
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.
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();
}