Comment puis-je tester si une lettre dans une chaîne est en majuscule ou en minuscule en utilisant JavaScript ?
Veuillez mettre à jour votre réponse avec quelques commentaires sur votre code et comment il répond à la question.
Comment puis-je tester si une lettre dans une chaîne est en majuscule ou en minuscule en utilisant JavaScript ?
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 ;)
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 à :
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;
}
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}`)
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 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.