Première lettre majuscule de la variable

88

J'ai cherché sur le Web, je ne trouve rien pour m'aider. Je veux mettre la première lettre de chaque mot en majuscule dans une variable.

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

toUpperCase();

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

Ryryan
la source

Réponses:

227

Utilisez la fonction .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 az, alors l'expression régulière (plus compliquée) suivante 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 Αλφα"

Peter Olson
la source
1
Cela ne fonctionne pas avec des noms comme Björn Lüchinger, cela devient BjöRn LüChinger. Une solution à cela?
Dédié le
2
@Dediqated Merci d'avoir signalé cela, faites-moi savoir si l'édition vous aide.
Peter Olson
Fonctionne très bien! Des conseils sur ce que devrait être la modification si je voulais simplement convertir en majuscule le premier caractère de la chaîne? (au lieu de chaque mot)
Andres SK
6
@andufo Bien sûr, c'est en fait beaucoup plus simple à faire. Just usestr[0].toUpperCase() + str.slice(1)
Peter Olson
@PeterOlson merci pour la réponse! J'ai fini par utiliser aussi var first = str.slice(0, str.indexOf(' ')); str = first.toLowerCase().replace(/^[\u00C0-\u1FFF\u2C00-\uD7FF\w]|\s[\u00C0-\u1FFF\u2C00-\uD7FF\w]/g, function(letter) { return letter.toUpperCase(); }) + str.substr(first.length);pour couvrir les caractères spéciaux.
Andres SK
72

Manière beaucoup plus simple:

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

Je dois remercier @Dementic de m'avoir conduit sur la bonne voie. Bien plus simple que tout ce que vous proposez.

vbullinger
la source
32
Cela ne modifie que la représentation visuelle de la chaîne et non la valeur de la chaîne elle-même.
toxaq
1
Vous ne pouvez pas appliquer cela aux variables extraites de la base de données, mais pour d'autres instaces, cette méthode est très propre
Armand
3
Remarque: text-transform:capitalizen'affectera pas TOUTES LES MAJUSCULES.
Bob Stein
1
Que faire si la chaîne (variable) doit être utilisée pour une opération autre que le simple affichage?
Fr0zenFyr
notez qu'il enregistrera l'entrée avec la majuscule, il ne le convertira que dans la vue
Sherif Elkassaby
25

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();
    });
}

(commentaire de fonction omis de la source par souci de concision. 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 votre question le demande) et pas seulement la première lettre d'une chaîne (comme le titre de votre question le demande)

Jonathan Fingland
la source
Cela fonctionne mieux que la solution acceptée qui met en majuscule les mots dans une phrase après l'apostrophe, donc par exemple "Je suis un exemple" devient "Je suis un exemple"
lizardhr
Ne fonctionne pas si vous avez un trait de soulignement dans votre chaîne d'origine, veuillez l'ajouter à votre REGEX pour de meilleures performances. TY
Ruslan Abuzant
1
@RuslanAbuzant Ce serait répondre à une question différente. Interpréter un trait de soulignement comme un séparateur de mot (ou un espace vide général) est bien, mais ce n'est pas ce que OP demandait ... et pourrait même casser son cas d'utilisation.
Jonathan Fingland
1
ucwords () est nul. Cela ne fonctionne pas avec Unicode (en particulier avec les alphabets cyrillique, grec et autres alphabets d'Europe centrale). Mieux vaut utiliser mb_convert_case () sur le back-end, par exemple: mb_convert_case ($ _ POST ['name'], MB_CASE_TITLE, 'utf-8');
Aleksey Kuznetsov
14

je voulais juste ajouter une solution javascript pure (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'));

Rafael Herscovici
la source
1
merci mon frère, je veux juste corriger quelque chose. cela c < str.length;devrait êtrechr < str.length;
Leysam Rosario
13

J'imagine que vous pouvez 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 cela devrait fonctionner pour vous. Une autre chose à considérer est que si ces données sont affichées, vous pouvez ajouter une classe à son conteneur qui a la propriété CSS "text-transform: capitalize".

Fudgie
la source
ne devrait pas être comme firstChar = firstChar.toUpperCase (); ? J'ai essayé le code dans Node.js et j'ai dû le faire ou rien n'a changé!
Adrian Adaine
9

Pour ce faire, vous n'avez même pas vraiment besoin de Javascript si vous comptez utiliser

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

Pourquoi ne pas faire ça comme css

#test,h1,h2,h3 { text-transform: capitalize; }

ou faites-le en tant que classe et appliquez cette classe là où vous en avez besoin

.ucwords { text-transform: capitalize; }
Bruce Smith
la source
4
Bienvenue dans Stackoverflow. Votre réponse suggère une alternative (qui pourrait être parfaitement valable dans certains cas d'utilisation), mais ne répond pas vraiment à la question. Comme j'ai compris la question, l'auteur voulait en fait transformer la variable Javascript, et pas seulement sa représentation visuelle.
helmbert
3
Ouais, mais d'autres personnes qui viennent à cette question pourraient être d'accord avec les réponses javascript OU css, comme moi, et cela a été vraiment utile ...
Brian Powell
6

Jamais entendu parler substr()?

Pour une entrée:

$("#test").text($("#test").text().substr(0,1).toUpperCase()+$("#test").text().substr(1,$("#test").text().length));


[Mise à jour:]

Merci à @FelixKling pour le conseil:

$("#test").text(function(i, text) {
    return text.substr(0,1).toUpperCase() + text.substr(1);
});
Zéro
la source
4
Au lieu d'appeler les text() quatre fois, passez une fonction à text():$("#test").text(function(i, text) { return text.substr(0,1).toUpperCase()+text.substr(1);});
Felix Kling
1
déterrer de vieux corps ici, mais si on savait que le contenu entre dans un élément, ce serait beaucoup plus facile à utiliser:$('#test').style.textTransform='capitalize';
Rafael Herscovici
Fermer, @Dementic, mais ça devrait être: $('#test').css('textTransform', 'capitalize'); BTW, c'est la meilleure réponse ici. Je vais le soumettre comme réponse.
vbullinger
@vbullinger - ne jugez pas mon code quand je l'écris ivre comme l'enfer :) et j'aime js, pas jq, donc mon code est faux, mais pas tropdocument.getElementById('test').style.textTransform='capitalize';
Rafael Herscovici
5

En me basant sur la réponse de @ peter-olson, j'ai adopté une approche plus orientée objet sans jQuery:

String.prototype.ucwords = function() {
    return this.toLowerCase().replace(/\b[a-z]/g, function(letter) {
        return letter.toUpperCase();
    });
}

alert("hello world".ucwords()); //Displays "Hello World"

Exemple: http://jsfiddle.net/LzaYH/1/

mmalone
la source
C'est vraiment la manière la plus appropriée, à mon avis. Je l'appellerais toUpperCaseWordsen ligne avec javascript toUpperCase()ettoLowerCase()
AB Carroll
4
var mystring = "hello World"
mystring = mystring.substring(0,1).toUpperCase() + 
mystring.substring(1,mystring.length)

console.log(mystring) //gives you Hello World
Nick Chan Abdullah
la source
4

Le moyen le plus simple

let str="hiren raiyani"
str.toLowerCase().replace(/(?<= )[^\s]|^./g, a => a.toUpperCase());

fonction définie par l'utilisateur:

function capitalize(str){
 return str.toLowerCase().replace(/(?<= )[^\s]|^./g, a => a.toUpperCase());
}

sortie: Hiren Raiyani

Utilisez le code comme fonction définie par l'utilisateur ou

Hiren Raiyani
la source
3
var ar = 'foo bar spam egg'.split(/\W/);
for(var i=0; i<ar.length; i++) {
  ar[i] = ar[i].substr(0,1).toUpperCase() + ar[i].substr(1,ar[i].length-1) 
}
ar.join(' '); // Foo Bar Spam Egg
erickb
la source
3

Vous pouvez essayer ce code simple avec les fonctionnalités d'ucwords en PHP.

function ucWords(text) {
    return text.split(' ').map((txt) => (txt.substring(0, 1).toUpperCase() + txt.substring(1, txt.length))).join(' ');
}
ucWords('hello WORLD');

Cela gardera les majuscules inchangées.

IamMHussain
la source
3

C'est aussi simple que ce qui suit:

string = 'test';
newString = string[0].toUpperCase() + string.slice(1);
alert(newString);
Sol
la source
2

Basée entièrement sur la réponse de @Dementric, cette solution est prête à être appelée avec une simple méthode jQuery, 'ucwords' ... Merci à tous ceux qui ont contribué ici !!!

$.extend({
ucwords : function(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
}

});

EXEMPLE: Ceci peut être appelé en utilisant la méthode

var string = "this is a test";
string = $.ucwords(string); // Returns "This Is A Test"
JoomGuy
la source
2

Vous pouvez utiliser text-transform: capitalize;pour ce travail -

HTML -

<input type="text" style="text-transform: capitalize;" />

JQuery -

$(document).ready(function (){
   var asdf = "WERTY UIOP";
   $('input').val(asdf.toLowerCase());
});

Essaye ça

Remarque: cela ne change que la représentation visuelle de la chaîne. Si vous alertez cette chaîne, elle affiche toujours la valeur d'origine de la chaîne.

Ishan Jain
la source
0

Chaîne à abaisser avant de mettre en majuscule la première lettre.

(Les deux utilisent la syntaxe Jquery)

function CapitaliseFirstLetter(elementId) {
    var txt = $("#" + elementId).val().toLowerCase();
    $("#" + elementId).val(txt.replace(/^(.)|\s(.)/g, function($1) {
    return $1.toUpperCase(); }));
    }

En plus une fonction pour capitaliser la chaîne ENTIER:

function CapitaliseAllText(elementId) {
     var txt = $("#" + elementId).val();
     $("#" + elementId).val(txt.toUpperCase());
     }

Syntaxe à utiliser sur l'événement click d'une zone de texte:

onClick="CapitaliseFirstLetter('TextId'); return false"
Rubisiste
la source
0

J'ai utilisé ce code -

function ucword(str){
    str = str.toLowerCase().replace(/(^([a-zA-Z\p{M}]))|([ -][a-zA-Z\p{M}])/g, function(replace_latter) { 
        return replace_latter.toUpperCase();
    });  //Can use also /\b[a-z]/g
    return str;  //First letter capital in each word
}

var uc = ucword("good morning. how are you?");
alert(uc);
Chinmay235
la source
0

Html:

<input class="capitalize" name="Address" type="text" value="" />

Javascript avec jQuery:

$(".capitalize").bind("keyup change", function (e) {
        if ($(this).val().length == 1)
            $(this).val($(this).val().toUpperCase());
        $(this).val($(this).val().toLowerCase().replace(/\s[\p{L}a-z]/g, function (letter) {
            return letter.toUpperCase();
        }))
    });
Robert Benyi
la source
0

Sans JQuery

String.prototype.ucwords = function() {
    str = this.trim();
    return str.replace(/(^([a-zA-Z\p{M}]))|([ -][a-zA-Z\p{M}])/g, function(s){
        return s.toUpperCase();
    });
};

console.log('hello world'.ucwords()); // Display Hello World
GérardMétal
la source
0

 var str = "HELLO WORLD HELLO WORLD HELLO WORLD HELLO WORLD";
         str = str.replace(
                        /([A-Z])([A-Z]+)/g,
        				function (a, w1, w2) {
                            return w1 + w2.toLowerCase();
                        });
alert(str);

Roche
la source
0

Voici la fonction ucwords () sécurisée par unicode, qui respecte en outre les doubles noms de famille comme le russe Засс-Ранцев et certains noms nobles comme Honoré de Balzac, d'Artagnan, Vincent van Gogh, Otto von Bismarck, Sulaymān ibn Dāwūd, etc.:

String.prototype.ucwords = function() {
  return this.toLowerCase()
    .replace(/(^|\s|\-)[^\s$]/g, function(m) {
       return m.toUpperCase();
    })
    // French, Arabic and some noble names...
    .replace(/\s(Of|De|Van|Von|Ibn|Из|Ван|Фон|Ибн)\s/g, function(m) { // Honoré de Balzac, Vincent van Gogh, Otto von Bismarck, Sulaymān ibn Dāwūd etc.
       return m.toLowerCase();
    })
    .replace(/(^|\s)(D|Д)(['’][^\s$])/g, function(m, p1, p2, p3) { // D'Artagnan or d'Artagnan / Д’Артаньян или д’Артаньян
       return p1 + (p1 === "" ? p2/*.toUpperCase()*/ : p2.toLowerCase()) + p3.toUpperCase();
    });
}
Aleksey Kuznetsov
la source
0

Le moyen le plus simple de mettre en majuscule la première lettre dans JS

var string = "made in india";

string =string .toLowerCase().replace(/\b[a-z]/g, function(letter){return  letter.toUpperCase();});

alert(string );

Résultat: "Made In India"

Amour Kumar
la source