web-dev-qa-db-fra.com

Détecter si une chaîne contient des caractères majuscules

Existe-t-il une alternative à l'utilisation d'une expression régulière pour détecter si une chaîne contient des caractères 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".

34
QFDev

Vous pouvez utiliser LINQ:

fullUri.Any(char.IsUpper);
75
MAV

RegEx semble exagéré:

bool containsAtLeastOneUppercase = fullUri.Any(char.IsUpper);
19
nvoigt

Vous pourriez probablement aussi faire (si vous voulez quelque chose qui fonctionnera dans .NET 1.0 :):

bool hasUpperCase = !fullUri.ToLower().Equals(fullUri);

Bien qu'un regex ce simple fonctionnera probablement très bien

10
geedubb

Utilisez Linq!

fullUri.Any(c=> char.IsUpper(c));
10
Alberto

Votre expression régulière ne trouvera que ASCII lettres majuscules. De manière pratique, le moteur d'expression régulière .NET est compatible avec Unicode, vous permettant de faire

Regex.IsMatch(fullUri, @"\p{Lu}") 

bien que je suppose que dans votre cas, vous ne vous attendez pas à des lettres non ASCII dans votre chaîne (compte tenu de son nom).

3
Tim Pietzcker