96 votes

Première lettre majuscule de la variable

J'ai cherché sur le web mais je n'ai rien trouvé pour m'aider. Je veux que la première lettre de chaque mot soit en majuscule dans une variable.

Jusqu'à présent, j'ai essayé :

toUpperCase();

Et je n'ai pas eu de chance, car il met toutes les lettres en majuscules.

2 votes

244voto

Peter Olson Points 30452

Utilisez le .replace [MDN] pour remplacer les lettres minuscules qui commencent un mot par la lettre majuscule.

var str = "hello world";
str = str.toLowerCase().replace(/\b[a-z]/g, function(letter) {
    return letter.toUpperCase();
});
alert(str); //Displays "Hello World"

Edit : Si vous avez affaire à des caractères de mot autres que a-z, l'expression régulière suivante (plus compliquée) pourrait mieux convenir à vos besoins.

var str = "петр данилович björn über ñaque αλφα";
str = str.toLowerCase().replace(/^[\u00C0-\u1FFF\u2C00-\uD7FF\w]|\s[\u00C0-\u1FFF\u2C00-\uD7FF\w]/g, function(letter) {
    return letter.toUpperCase();
});
alert(str); //Displays "Петр Данилович Björn Über Ñaque Αλφα"

1 votes

Cela ne fonctionne pas avec des noms comme Björn Lüchinger ce qui donne BjöRn LüChinger . Une solution à ce problème ?

2 votes

@Dediqated Merci de l'avoir signalé, faites-moi savoir si la modification est utile.

0 votes

Fonctionne très bien ! Avez-vous des conseils sur la modification à apporter si je veux seulement convertir en majuscules le premier caractère de la chaîne ? (au lieu de chaque mot)

75voto

vbullinger Points 649

C'est beaucoup plus facile :

$('#test').css('textTransform', 'capitalize');

Je dois reconnaître à @Dementic le mérite de m'avoir conduit sur le bon chemin. Bien plus simple que ce que vous proposez.

34 votes

Cela ne modifie que la représentation visuelle de la chaîne et non la valeur de la chaîne elle-même.

2 votes

Vous ne pouvez pas appliquer cette méthode aux variables récupérées dans la base de données, mais pour les autres cas, cette méthode est très propre.

3 votes

Note : text-transform:capitalize n'affectera pas les MAJUSCULES.

28voto

Jonathan Fingland Points 26224

http://phpjs.org/functions/ucwords:569 a un bon exemple

function ucwords (str) {
    return (str + '').replace(/^([a-z])|\s+([a-z])/g, function ($1) {
        return $1.toUpperCase();
    });
}

(le commentaire de la fonction a été omis de la source pour des raisons de brièveté. veuillez consulter la source liée pour plus de détails)

EDIT : Veuillez noter que cette fonction met en majuscule la première lettre de chaque mot (comme le demande votre question) et pas seulement la première lettre d'une chaîne de caractères (comme le demande le titre de votre question).

0 votes

Cela fonctionne mieux que la solution acceptée qui met les mots en majuscules dans une phrase après l'apostrophe, donc par exemple "Je suis un exemple" devient "Je suis un exemple".

0 votes

Ne fonctionne pas si vous avez un trait de soulignement dans votre chaîne originale, veuillez l'ajouter à votre REGEX pour de meilleures performances. TY

1 votes

@RuslanAbuzant Ce serait répondre à une autre question. Interpréter un trait de soulignement comme un séparateur de mot (ou un espace blanc général) est bien, mais ce n'est pas ce que le PO demandait... et pourrait même casser son cas d'utilisation.

16voto

Dementic Points 3288

Je voulais juste ajouter une solution purement javascript (pas de JQuery).

function capitalize(str) {
  strVal = '';
  str = str.split(' ');
  for (var chr = 0; chr < str.length; chr++) {
    strVal += str[chr].substring(0, 1).toUpperCase() + str[chr].substring(1, str[chr].length) + ' '
  }
  return strVal
}

console.log(capitalize('hello world'));

1 votes

Merci mon frère, je veux juste corriger quelque chose. Ceci. c < str.length; devrait être chr < str.length;

14voto

Nicholas Hughes Points 166

J'imagine que vous pourriez utiliser substring() et toUpperCase() pour extraire le premier caractère, le mettre en majuscule, puis remplacer le premier caractère de votre chaîne par le résultat.

myString = "cheeseburger";
firstChar = myString.substring( 0, 1 ); // == "c"
firstChar.toUpperCase();
tail = myString.substring( 1 ); // == "heeseburger"
myString = firstChar + tail; // myString == "Cheeseburger"

Je pense que ça devrait marcher pour vous. Si ces données sont affichées, vous pouvez également ajouter une classe à leur conteneur avec la propriété CSS "text-transform : capitalize".

0 votes

Ne devrait-il pas y avoir comme firstChar = firstChar.toUpperCase() ; ? J'ai essayé le code dans Node.js et j'ai dû faire cela ou rien n'a changé !

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