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 .

4voto

Zachary Puthoff Points 81

La meilleure façon de procéder est d'utiliser une expression régulière, un opérateur ternaire et l'outil intégré .test() pour les chaînes de caractères.

Je vous laisse chercher sur Google les tenants et aboutissants des expressions régulières et de la méthode de test pour les chaînes de caractères (elles sont faciles à trouver), mais ici nous allons l'utiliser pour tester votre variable.

/[a-z]/i.test(your-character-here)

Cette option renvoie VRAI ou FAUX selon que votre caractère correspond ou non au jeu de caractères de l'expression régulière. Notre expression régulière vérifie toutes les lettres a-z /[a-z]/ quel que soit leur cas, grâce à la i drapeau.

Donc, un test de base serait :

var theAnswer = "";
if (/[a-z]/i.test(your-character-here)) {
  theAnswer = "It's a letter."
}

Maintenant, nous devons déterminer si c'est une majuscule ou une minuscule. Donc, si nous enlevons le i de notre expression régulière, alors notre code ci-dessus testera les lettres minuscules a-z. Et si nous collons un autre if dans le else de notre premier if nous pouvons également tester les majuscules en utilisant A-Z. Comme ceci :

var theAnswer = "";
if (/[a-z]/.test(your-character-here)) {
  theAnswer = "It's a lower case letter."
} else if (/[A-Z]/.test(your-character-here)) {
  theAnswer = "It's an upper case letter.";
}

Et juste au cas où ce ne serait pas une lettre, nous pouvons ajouter une dernière déclaration else :

var theAnswer = "";
if (/[a-z]/.test(your-character-here)) {
  theAnswer = "It's a lower case letter."
} else if (/[A-Z]/.test(your-character-here)) {
  theAnswer = "It's an upper case letter.";
} else {
  theAnswer = "It's not a letter."
}

Le code ci-dessus fonctionnerait. Mais c'est un peu laid. A la place, nous pouvons utiliser un "opérateur ternaire" pour remplacer notre code if-else ci-dessus. Les opérateurs ternaires ne sont que des raccourcis simples pour coder une fonction if-else . La syntaxe est simple :

(statement-to-be-evaluated) ? (code-if-true) : (code-if-false)

Elles peuvent également être imbriquées les unes dans les autres. Ainsi, une fonction peut ressembler à :

var theAnswer = "";
function whichCase(theLetter) {
  theAnswer = /[a-z]/.test(theLetter) ? "It's lower case." : "";
  theAnswer = /[A-Z]/.test(theLetter) ? "It's upper case." : "";
  return(theAnswer);
}

Le code ci-dessus semble bon, mais ne fonctionnera pas tout à fait, car si notre caractère est minuscule, theAnswer est mis à "" lorsqu'il teste les majuscules, alors imbriquons-les :

var theAnswer = "";
function whichCase(theLetter) {
  theAnswer = /[a-z]/.test(theLetter) ? "It's lower case." : (/[A-Z]/.test(theLetter) ? "It's upper case." : "It's not a letter.");
  return(theAnswer);
}

Cela marchera très bien ! Mais il n'est pas nécessaire d'avoir deux lignes distinctes pour définir la variable theAnswer et de le renvoyer. Et nous devrions utiliser let et const plutôt que var (regardez-les si vous ne savez pas pourquoi). Une fois que nous aurons fait ces changements :

function whichCase(theLetter) {
  return(/[A-Z]/.test(theLetter) ? "It's upper case." : (/[a-z]/.test(theLetter) ? "It's lower case." : "It's not a letter.")); 
}

Et nous nous retrouvons avec un morceau de code élégant et concis ;)

4voto

Sonic Beard Points 1

Voir mon commentaire sur la réponse choisie. Les autres solutions qui se limitent à la table ASCII ou qui utilisent les littéraux de caractères actuels ignorent complètement l'Unicode et les centaines d'autres caractères qui ont une casse.

Ce code va définir la variable caseGroup à :

  • 1 pour les majuscules
  • -1 pour les minuscules
  • 0 pour Sans Cas

    var caseGroup = (character.toLowerCase() == character.toUpperCase() ? 0 : (character == character.toUpperCase() ? 1 : -1));

Tu pourrais en faire quelque chose comme ça...

    function determineCase(character) {
        return (character.toLowerCase() == character.toUpperCase() ? 0 : (character == character.toUpperCase() ? 1 : -1));
    }

    function isUpper(character) {
        return determineCase(character) == 1;
    }

    function isLower(character) {
        return determineCase(character) == -1;
    }

    function hasCase(character) {
        return determineCase(character) != 0;
    }

3voto

Huy Do Points 49
function solution(s) {
var c = s[0];

if (c == c.toUpperCase() && !(c >= '0' && c <= '9') &&(c >='A' && c <= 'Z')) {
    return 'upper';
} else if (c == c.toLowerCase() && !(c >= '0' && c <= '9') &&(c >='a' && c <= 'z')){
    return 'lower';
} else if (c >= '0' && c <= '9'){
   return 'digit'
} else {
  return 'other' 
}
}

var str1= (solution('A')) // upper
var str2 = solution('b') // lower
var str3 = solution('1') // digit
var str4 = solution('_') // other
console.log(`${str1} ${str2} ${str3} ${str4}`)

0 votes

Veuillez mettre à jour votre réponse avec quelques commentaires sur votre code et comment il répond à la question.

0 votes

Ce code vérifiera le premier caractère de la chaîne de caractères pour les majuscules, les minuscules, les chiffres et autres.

2voto

pasx Points 141
function checkCase(c){
    var u = c.toUpperCase();
    return (c.toLowerCase() === u ? -1 : (c === u ? 1 : 0));
};

D'après le commentaire de Sonic Beard sur la réponse principale. J'ai changé la logique dans le résultat :

  • 0 : Minuscule

  • 1 : majuscule

  • -1 : ni l'un ni l'autre

2voto

user3449311 Points 167

Vous pouvez tester si votre tableau contient une chaîne en majuscules ou en minuscules en utilisant la méthode match et regex, ci-dessous une base pour commencer votre test

  var array = ['a', 'b', 'c', 'A', 'B', 'C', '(', ')', '+', '-', '~', '*'];
  var character = array.join('')
      console.log(character)

  var test = function(search){
      upperCase = search.match(/[A-Z]/g)
      console.log(upperCase)

      lowerCase = search.match(/[a-z]/g)
      console.log(lowerCase)
   }

   test(character)

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