402 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 .

433voto

La réponse de josh et maleki retournera vrai sur les majuscules et les minuscules si le caractère ou la chaîne entière est numérique. ce qui fait que le résultat est faux. exemple utilisant josh

var character = '5';
if (character == character.toUpperCase()) {
 alert ('upper case true');
}
if (character == character.toLowerCase()){
 alert ('lower case true');
}

une autre solution consiste à tester d'abord s'il s'agit d'un chiffre, puis à tester s'il s'agit d'une majuscule ou d'une minuscule. exemple

var strings = 'this iS a TeSt 523 Now!';
var i=0;
var character='';
while (i <= strings.length){
    character = strings.charAt(i);
    if (!isNaN(character * 1)){
        alert('character is numeric');
    }else{
        if (character == character.toUpperCase()) {
            alert ('upper case true');
        }
        if (character == character.toLowerCase()){
            alert ('lower case true');
        }
    }
    i++;
}

26 votes

N'obtiendrez-vous pas le même résultat erroné si le caractère n'est ni numérique ni alphabétique, comme la ponctuation ?

6 votes

1 votes

Ce code signalera que les caractères de ponctuation comme ! sont numériques.

79voto

Daniel Vandersluis Points 30498
if (character == character.toLowerCase())
{
  // The character is lowercase
}
else
{
  // The character is uppercase
}

65voto

WebFreak001 Points 1149

Le problème avec les autres réponses est que certains caractères, comme les chiffres ou les signes de ponctuation, renvoient également la réponse vraie lorsqu'on vérifie la présence de minuscules ou de majuscules.

J'ai trouvé que cela fonctionnait très bien pour lui :

function isLowerCase(str)
{
    return str == str.toLowerCase() && str != str.toUpperCase();
}

Cela fonctionne pour la ponctuation, les chiffres et les lettres :

assert(isLowerCase("a"))
assert(!isLowerCase("Ü"))
assert(!isLowerCase("4"))
assert(!isLowerCase("_"))

Pour vérifier une lettre, il suffit de l'appeler en utilisant isLowerCase(str[charIndex])

5 votes

Je ne sais pas pourquoi les autres réponses sont votées. C'est la seule solution à laquelle j'ai pensé également - la logique étant "le caractère a-t-il des variantes majuscules & minuscules ? Si c'est le cas, il faut retourner si c'est une majuscule ou une minuscule".

0 votes

Désolé, mais il semble qu'il s'agisse d'un doublon d'un autre article. réponse d'un enfant de trois ans .

4 votes

@GaurangTandon ouais 2 ans après avoir répondu j'ai remarqué cela aussi, mais je n'ai pas remarqué avant parce qu'il est enveloppé dans une boucle for, logging quelque chose à la console et en général pas un extrait de code réutilisable donc moi et (basé sur les votes sur cette réponse) beaucoup d'autres personnes ont naturellement juste sauté la réponse. C'est pourquoi je pense qu'il est bon d'avoir cette réponse comme un copier-coller rapide par opposition à l'autre réponse.

48voto

ciembor Points 1472

Ceci enregistrera true si le caractère est une lettre majuscule, et false dans tous les autres cas :

var letters = ['a', 'b', 'c', 'A', 'B', 'C', '(', ')', '+', '-', '~', '*'];

​​​for (var ​i = 0; i<letters.length; i++) {
    if (letters[i] === letters[i].toUpperCase()
        && letters[i] !== letters[i].toLowerCase()) {
        console.log(letters[i] + ": " + true);
    } else {
        console.log(letters[i] + ": " + false);
    }
}​

Vous pouvez le tester ici : http://jsfiddle.net/Axfxz/ (utiliser Firebug ou autre).

​​​for (var ​i = 0; i<letters.length; i++) {
    if (letters[i] !== letters[i].toUpperCase()
        && letters[i] === letters[i].toLowerCase()) {
        console.log(letters[i] + ": " + true);
    } else {
        console.log(letters[i] + ": " + false);
    }
}​

et ceci pour les minuscules :).

1 votes

BTW, fonctionne également avec les caractères accentués comme "É", "Ñ" et "ñ".

6 votes

Malheureusement, il existe des lettres minuscules qui n'ont pas de variante majuscule (et probablement l'inverse aussi). Le "ß" allemand est une lettre minuscule, mais si vous lui appliquez la deuxième fonction, vous obtiendrez un faux.

1 votes

Ok, essaie ça :

47voto

const isUpperCase = (string) => /^[A-Z]*$/.test(string)

alors :

isUpperCase('A') // true
isUpperCase('a') // false

4 votes

La meilleure réponse de loin, rapide, n'allouant aucune mémoire, ou transformant les données.

2 votes

Ne fonctionne pas avec les caractères accentués (á, Á), les mutations des voyelles (öÖ, äÄ, üÜ) et les graphèmes (ß,) tho.

0 votes

Êtes-vous sûr qu'il s'agit de Go, et non de JS ?

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