430 votes

Comment puis-je tester si une lettre dans une chaîne est en majuscule ou en minuscule en utilisant JavaScript ?

Comment puis-je tester si une lettre dans une chaîne est en majuscule ou en minuscule en utilisant JavaScript ?

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 .

24voto

Josh Points 4165
function isUpperCase(myString) { 
  return (myString == myString.toUpperCase()); 
} 
function isLowerCase(myString) { 
  return (myString == myString.toLowerCase()); 
}

1 votes

Je crois que cette solution ne fonctionne que si la chaîne ne comporte qu'un seul caractère et que ce caractère est celui qui nous intéresse... vous devez d'abord obtenir le caractère avant d'appeler l'une de ces méthodes.

4 votes

@zaczap - incorrect. Ceux-ci vont transformer (et ensuite tester) la chaîne entière.

3 votes

+1 aux commentaires - cette réponse est légèrement décalée par rapport à la question initiale, qui portait sur une lettre dans une chaîne (et non sur la chaîne entière).

24voto

KooiInc Points 38845

Vous pouvez utiliser un test d'expressions régulières et la fonction toUpperCase méthode :

String.prototype.charAtIsUpper = function (atpos){
      var chr = this.charAt(atpos);
      return /[A-Z]|[\u0080-\u024F]/.test(chr) && chr === chr.toUpperCase();
};
// usage (note: character position is zero based)
'hi There'.charAtIsUpper(3);      //=> true
'BLUE CURAÇAO'.charAtIsUpper(9);  //=> true
'Hello, World!'.charAtIsUpper(5); //=> false

2 votes

@LarsH : J'ai modifié (et simplifié) la méthode du prototype. Elle inclut maintenant les diacritiques

1 votes

Pourquoi cette comparaison ? && chr === chr.toUpperCase(); ? ?

3 votes

@Flame_Phoenix La gamme \u0080-\u024F peut contenir des diacritiques en minuscules, le test doit donc également vérifier le caractère lui-même.

15voto

Arthur van Acker Points 176
function isCapital(ch){
    return ch.charCodeAt() >= 65 && ch.charCodeAt() <= 90;
}

3 votes

Ou juste return (ch.charCodeAt() >= 65 && ch.charCodeAt() <= 90) .

10voto

maleki Points 786

Plus précisément à ce qui est demandé. Passez dans un String et une position à vérifier. Très proche de celle de Josh, sauf que celle-ci compare une plus grande chaîne. Je l'aurais ajouté en commentaire mais je n'ai pas encore cette capacité.

function isUpperCase(myString, pos) { 
    return (myString.charAt(pos) == myString.charAt(pos).toUpperCase()); 
}   

function isLowerCase(myString, pos) {
    return (myString.charAt(pos) == myString.charAt(pos).toLowerCase()); 
}

0 votes

\=== pour les meilleures pratiques

8voto

Stephen Nelson Points 422

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X