Comment puis-je tester si une lettre dans une chaîne est en majuscule ou en minuscule en utilisant JavaScript ?
@RobertReiz Vraiment ? Cela ne fonctionne pas pour les caractères non romains.
Comment puis-je tester si une lettre dans une chaîne est en majuscule ou en minuscule en utilisant JavaScript ?
Vous pouvez également utiliser une expression régulière pour détecter explicitement les caractères alphabétiques romains majuscules.
isUpperCase = function(char) {
return !!/[A-Z]/.exec(char[0]);
};
EDIT : la fonction ci-dessus est correcte pour l'Unicode ASCII/Basic Latin, ce qui est probablement tout ce qui vous intéresse. La version suivante supporte également le supplément Latin-1 et les blocs Unicode grecs et coptes... Au cas où vous en auriez besoin pour une raison quelconque.
isUpperCase = function(char) {
return !!/[A-ZÀ-ÖØ-Þ---]/.exec(char[0]);
};
Cette stratégie commence à s'effondrer si vous avez besoin d'un soutien supplémentaire (est en majuscule ?), car certains blocs mélangent les caractères majuscules et minuscules.
Il manque des tonnes d'autres caractères locaux, par exemple le polonais. Pour cette raison, la solution qui utilise la comparaison avec .toLowerCase()
ou .toUpperCase()
sont préférés, car ils supportent la plupart des locales en interne.
"Ce qui est probablement tout ce dont vous vous soucierez jamais". Non. Beaucoup de gens s'intéressent, et beaucoup d'autres devraient s'intéresser à des langues autres que l'anglais contemporain. Coder en dur les quelques caractères qui vous intéressent au moment où vous écrivez la fonction est une mauvaise pratique. De même, oui, la majuscule ( étant la variante minuscule).
Il y a une réponse très simple, que personne d'autre n'a mentionnée :
function isLowerCase(str) {
return str !== str.toUpperCase();
}
Si str.toUpperCase()
ne renvoie pas le même str
il doit être en minuscule. Pour tester les majuscules, vous le changez en str !== str.toLowererCase()
.
Contrairement à d'autres réponses, il fonctionne correctement sur les caractères non alphabétiques (il retourne false
) et cela fonctionne pour les autres alphabets, les caractères accentués, etc.
J'étais sur le point de me vanter de cette découverte, mais vous étiez le premier. Il est utile de détecter si le premier caractère est une majuscule et une lettre à la fois
Préférez la réponse d'Arthur van Acker : il est inutile de gaspiller le CPU en conversion de la chaîne entière en majuscules, juste pour vérifier si un caractère est une majuscule. Vous pouvez simplement effectuer une vérification de la plage ASCII sur ce caractère. La conversion fonctionne, bien sûr, mais c'est un codage paresseux.
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.
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.