213 votes

Capitaliser les mots dans la chaîne

Quelle est la meilleure approche pour capitaliser des mots dans une chaîne?

317voto

disfated Points 2604
 String.prototype.capitalize = function() {
    return this.replace(/(?:^|\s)\S/g, function(a) { return a.toUpperCase(); });
};
 

Usage:

 'your string'.capitalize(); // -> 'Your String'
 

  • corrige la solution de Marco Demaio où la première lettre précédée d'un espace n'est pas en majuscule.

     ' javascript'.capitalize(); // -> ' Javascript'
     
  • peut gérer les symboles nationaux et les lettres accentuées.

     'бабушка курит трубку'.capitalize();  // -> 'Бабушка Курит Трубку'
    'località àtilacol'.capitalize()      // -> 'Località Àtilacol'
     

ADD-ON je le trouve utile

 String.prototype.capitalize = function(lower) {
    return (lower ? this.toLowerCase() : this).replace(/(?:^|\s)\S/g, function(a) { return a.toUpperCase(); });
};
'javaSCrIPT'.capitalize();      // -> 'JavaSCrIPT'
'javaSCrIPT'.capitalize(true);  // -> 'Javascript'
 

38voto

vsync Points 11280
 function capitalize(s){
    return s.toLowerCase().replace( /\b./g, function(a){ return a.toUpperCase(); } );
};

capitalize('this IS THE wOrst string eVeR');
 

sortie: "C'est la pire chaîne de tous les temps"

Mettre à jour:

Il semble que cette solution remplace la mienne: http://stackoverflow.com/a/7592235/104380

16voto

Marco Demaio Points 8667

La réponse fournie par le vsync fonctionne aussi longtemps que vous n'avez pas de lettres accentuées dans la chaîne d'entrée.

Je ne sais pas la raison, mais apparemment l' \b dans regexp correspond également les lettres accentuées (testé sur IE8 et Chrome), de sorte que la chaîne "località" serait à tort capitalisés converti en "LocalitÀ" (le à lettre est en majuscule cause de la regexp pense que c'est une limite de mot)

Un cadre plus général de la fonction qui fonctionne aussi avec les lettres accentuées est celui-ci:

String.prototype.toCapitalize = function()
{ 
   return this.toLowerCase().replace(/^.|\s\S/g, function(a) { return a.toUpperCase(); });
}

Vous pouvez l'utiliser comme ceci:

alert( "hello località".toCapitalize() );

5voto

David Hedlund Points 66192

Puisque tout le monde vous a donné la réponse JavaScript que vous avez demandée, je précise que la propriété CSS text-transform: capitalize fera exactement cela.

Je me rends compte que ce n'est peut- être pas ce que vous demandez - vous ne nous avez pas décrit le contexte dans lequel vous l'exécutez - mais si c'est juste pour la présentation, je choisirais certainement l'alternative CSS.

4voto

meouw Points 21368

John Resig (de jQuery fame ) adapté un script perl, écrit par John Gruber, JavaScript. Ce script capitalise d'une manière plus intelligente, il ne capitalise pas les petits mots comme " de " et "et", par exemple.

Vous pouvez le trouver ici: Titre de la Capitalisation dans le JavaScript

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