Une bonne réponse à cette question doit être succincte, gérer correctement l'unicode et traiter les chaînes vides et les valeurs nulles.
function isUpperCase(c) {
return !!c && c != c.toLocaleLowerCase();
}
Cette approche traite d'abord les chaînes vides et les nuls, puis s'assure que la conversion de la chaîne donnée en minuscules modifie son égalité. Cela permet de s'assurer que la chaîne contient au moins une lettre majuscule selon les règles de capitalisation du local actuel (et ne renvoie pas de faux positifs pour les chiffres et autres glyphes qui n'ont pas de capitalisation).
La question originale demandait spécifiquement de tester le premier caractère. Afin de garder votre code simple et clair, je séparerais le premier caractère de la chaîne de caractères séparément du test pour savoir s'il s'agit d'une majuscule.
3 votes
Puis-je clarifier la question - vous voulez tester si une lettre particulière dans une chaîne est majuscule ou minuscule - ou voulez-vous tester si la chaîne entière contient une lettre qui est majuscule ou minuscule. si c'est la dernière, alors comment proposez-vous d'obtenir le résultat sans faire une boucle dans la chaîne et tester une lettre à la fois ?
3 votes
jsperf.com/isupper-comparison/5 Il y a quelques idées, et vous pouvez aussi les tester pour la vitesse.
2 votes
Idée n°4 (
[:upper:]
) est rapide et très cool sauf qu'il ne fonctionne pas, voir mon commentaire ci-dessous et mon corrigé jsperf.com/isupper-comparison/7 .8 votes
str == str.toUpperCase();
renvoie à vrai ou faux2 votes
str.toUpperCase() === str && str.toLowerCase() !== str
si vous ne voulez vraiment pas utiliser regExp.