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".

31
demandé sur QFDev 2013-11-17 19:26:12

6 réponses

Vous pouvez utiliser LINQ:

fullUri.Any(char.IsUpper);
64
répondu MAV 2018-04-20 21:33:17

RegEx semble être exagéré:

bool containsAtLeastOneUppercase = fullUri.Any(char.IsUpper);
18
répondu nvoigt 2013-11-17 15:29:22

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

9
répondu geedubb 2013-11-17 15:36:23

Utilisez Linq!

fullUri.Any(c=> char.IsUpper(c));
8
répondu Alberto 2013-11-17 15:29:29

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).

2
répondu Tim Pietzcker 2013-11-17 15:28:03

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

0
répondu glls 2017-02-17 02:26:46