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 .

7voto

Nat Points 643

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.

0 votes

@RobertReiz Vraiment ? Cela ne fonctionne pas pour les caractères non romains.

0 votes

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.

1 votes

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

7voto

James Points 507

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.

0 votes

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

0 votes

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.

0 votes

@Engineer, mais la réponse d'Acker est fausse. "É" n'est pas en minuscule.

5voto

Je crois que c'est la solution la plus simple Vous pouvez utiliser le gestionnaire onchange dans le champ de saisie pour effectuer la validation.

const isValid = e.target.value === e.target.value.toLowerCase()

if (isValid) {
  //Do something
} else {
  //Do something
}

5voto

Gibolt Points 4072

Il s'agit d'une solution simple et lisible utilisant une simple expression rationnelle.

// Get specific char in string
const char = string.charAt(index);

const isLowerCaseLetter = (/[a-z]/.test(char));
const isUpperCaseLetter = (/[A-Z]/.test(char));

4voto

Himanshu Teotia Points 591

Vous pouvez également utiliser ceci, qui vérifiera les minuscules et les majuscules de la chaîne de caractères.

var s = "a"
if(/[a-z]/.test(s)){
  alert ('lower case true');
}

if(/[A-Z]/.test(s)) {
 alert ('upper case true'); 
}

0 votes

Ajoutez une explication à la réponse pour expliquer comment cette réponse aide le PO à résoudre le problème actuel.

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