Détecter si une chaîne contient des caractères majuscules
Est-il une alternative à l'utilisation d'une expression régulière pour détecter si une chaîne contient des caractères en majuscules? Actuellement, j'utilise l'expression régulière suivante:
Regex.IsMatch(fullUri, "[A-Z]")
Cela fonctionne bien mais j'entends souvent le vieil adage "Si vous utilisez des expressions régulières, vous avez maintenant deux problèmes".
6 réponses
RegEx semble être exagéré:
bool containsAtLeastOneUppercase = fullUri.Any(char.IsUpper);
Vous pourriez probablement aussi faire (si vous voulez quelque chose qui fonctionnera dans. net 1.0:):
bool hasUpperCase = !fullUri.ToLower().Equals(fullUri);
Bien qu'une expression rationnelle, ce simple fonctionnera probablement bien
Votre regex ne trouvera que des lettres majuscules ASCII. Idéalement, le moteur. net regex est compatible Unicode, ce qui vous permet de faire
Regex.IsMatch(fullUri, @"\p{Lu}")
Bien que je suppose que dans votre cas, vous n'attendez pas de lettres non-ASCII dans votre chaîne (compte tenu de son nom).
En utilisant des boucles for, pas aussi efficaces et lisibles que les autres méthodes l'ont souligné, mais pour commencer devrait fonctionner et fournir un moyen complet de le faire:
int counter = 0;
for(int i=0; i< myString.Length;i++)
{
//if character is upper add +1 to counter
if(char.IsUpper(chaineNonPascale[i]))
{
counter++;
}
}
Fondamentalement, vous itérez sur votre chaîne et vérifiez les caractères supérieurs, alors vous pouvez ajouter de la logique quant à ce qu'il faut faire avec l'endroit où il y a un caractère supérieur. Par exemple, insérez un espace où le second caractère majuscule est trouvé, puis utilisez la méthode ToLower sur toute la chaîne...