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 .

2voto

Fenici Points 158
function checkCharType (charToCheck) {
    // body... 
    var returnValue = "O";
    var charCode = charToCheck.charCodeAt(0);

    if(charCode >= "A".charCodeAt(0) && charCode <= "Z".charCodeAt(0)){

        returnValue = "U";

    }else if (charCode >= "a".charCodeAt(0) &&
                charCode <= "z".charCodeAt(0) ){
        returnValue = "L";
    }else if (charCode >= "0".charCodeAt(0) &&
            charCode <= "9".charCodeAt(0)  ) {
        returnValue = "N";
    }
    return returnValue;
}

var myString = prompt("Enter Some text: ", "Hello world !");

switch (checkCharType(myString)) {
    case "U":
        // statements_1
        document.write("First character was upper case");
        break;

    case "L":
        document.write("First character was a lower case");
        break;
    case "N":
        document.write("First character was a number");
        break
    default:
        // statements_def
        document.write("First character was not a character or a number");
        break;
}
  1. Définissez une fonction checkCharType() en déclarant la variable returnValue et en l'initialisant au caractère "O" pour indiquer qu'il s'agit d'une autre valeur.

  2. U pour majuscule ; L pour minuscule ; N pour chiffre

  3. Utilisez la méthode charCodeAt() pour obtenir le code de caractère du premier caractère.

  4. En utilisant l'instruction if, qui vérifie dans quelle plage de valeurs se situe le code du caractère.

  5. S'il se situe entre les codes de caractères pour A et Z, il est en majuscule, le code de caractère entre a et z ,sa minuscule. et ainsi de suite.

  6. "A".charCode(0)

    var myChar = new String("A") ; maChar.charCodeAt(0) ; "A" : code numérique "65".

  7. Vérifiez la chaîne

2voto

Matthew Points 904

Cela vérifie la chaîne ENTIÈRE, pas seulement la première lettre. J'ai pensé que je devais le partager avec tout le monde ici.

Voici une fonction qui utilise une expression régulière pour tester les lettres d'une chaîne de caractères ; elle renvoie vrai si la lettre est une majuscule (A-Z). Nous réduisons ensuite le tableau vrai/faux à une seule valeur. S'il est égal à la longueur de la chaîne, cela signifie que toutes les lettres ont passé le test de l'expression régulière, ce qui signifie que la chaîne est en majuscules. Dans le cas contraire, la chaîne est en minuscules.

const isUpperCase = (str) => {
  let result = str
    .split('')
    .map(letter => /[A-Z]/.test(letter))
    .reduce((a, b) => a + b);

  return result === str.length;
}

console.log(isUpperCase('123')); // false
console.log('123' === '123'.toUpperCase()); // true

1voto

Julien Metral Points 887

Une autre façon est de comparer le caractère avec un objet vide, je ne sais pas vraiment pourquoi ça marche, mais ça marche :

for (let i = 1; i <= 26; i++) {
   const letter = (i + 9).toString(36).toUpperCase();
   console.log('letter', letter, 'is upper', letter<{}); // returns true
}
for (let i = 1; i <= 26; i++) {
   const letter = (i + 9).toString(36);
   console.log('letter', letter, 'is upper', letter<{}); // returns false
}

donc dans une fonction :

function charIsUpper(character) {
   return character<{};
}

EDIT il ne fonctionne pas avec les accents et les diacritiques, il est donc possible de le supprimer.

function charIsUpper(character) {
   return character
           .normalize('NFD')
           .replace(/[\u0300-\u036f]/g, '')<{};
}

1 votes

Cela fonctionne parce que la représentation en chaîne d'un objet est [object Object] . Vous vérifiez essentiellement si le code de caractère de la lettre vient avant [ . Puisque les codes de caractères pour Z, [, a sont 90, 91, 97 respectivement, la comparaison est vraie pour les lettres majuscules et fausse pour les lettres minuscules. En d'autres termes, il s'agit d'une méthode aussi peu pratique que l'utilisation de chiffres en base 36 pour obtenir les lettres de l'alphabet.

0 votes

@radulfr Chose intéressante, j'ai pensé que c'était quelque chose comme ça mais je n'avais pas la réponse exacte, effectivement cette méthode ne fonctionne pas avec les accents en majuscules mais il est possible de la désaccentuer avec quelque chose comme ça : character.normalize("NFD").replace(/[\u0300-\u036f]/g

1voto

alessiosavi Points 310

Il suffit de vérifier la valeur ASCII

// IsLower verify that a string does not contains upper char
func IsLower(str string) bool {
    for i := range str {
        ascii := int(str[i])
        if ascii < 91 && ascii > 64 {
            return false
        }
    }
    return true
}

1voto

Shedolamack Points 164

En supposant qu'une chaîne de caractères n'est considérée que pour pas être tout en majuscules si au moins une lettre minuscule est présente, cela fonctionne bien. Je comprends que ce n'est pas concis et succinct comme tout le monde a essayé de le faire, mais ça fonctionne =)

function isUpperCase(str) {
    for (var i = 0, len = str.length; i < len; i++) {
        var letter = str.charAt(i);
        var keyCode = letter.charCodeAt(i);
        if (keyCode > 96 && keyCode < 123) {
            return false;
        }
    }

    return true;
}

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