Majuscule des mots dans la chaîne

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

125
demandé sur Damjan Pavlica 2010-02-25 12:12:13

16 réponses

l'implémentation la plus courte pour capitaliser des mots dans une chaîne est la suivante en utilisant les fonctions de flèche de ES6:

'your string'.replace(/\b\w/g, l => l.toUpperCase())
// => 'Your String'

mise en œuvre compatible ES5:

'your string'.replace(/\b\w/g, function(l){ return l.toUpperCase() })
// => 'Your String'

le regex correspond essentiellement à la première lettre de chaque mot dans la chaîne donnée et transforme seulement cette lettre en majuscule:

  • \b correspond à une limite de mots (le début ou la fin de
  • \w correspond au méta-caractère suivant [A-zA-Z0-9].

Pour les caractères non-ASCII reportez-vous à cette solution au lieu de

'ÿöur striñg'.replace(/(^|\s)\S/g, l => l.toUpperCase())

ce regex correspond à la première lettre et à toutes les lettres non blanches précédées de blancs dans la chaîne donnée et ne transforme que cette lettre en majuscule:

  • \s correspond à un caractère d'espace
  • \s correspond à un caractère non-blanc
  • (x|y) correspond à l'une des variantes spécifiées

un groupe non capturable aurait pu être utilisé ici comme suit /(?:^|\s)\S/g bien que le drapeau g dans notre regex ne capturera pas les sous-groupes de toute façon.

santé!

157
répondu Ivo 2018-03-05 17:35:41
String.prototype.capitalize = function() {
    return this.replace(/(?:^|\s)\S/g, function(a) { return a.toUpperCase(); });
};

Utilisation:

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

  • fixe Marco Demaio ' s solution où la première lettre avec un espace précédent n'est pas capitalisé.

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

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

ADD-ON Je trouve ça 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'
195
répondu disfated 2017-05-23 12:26:36
function capitalize(s){
    return s.toLowerCase().replace( /\b./g, function(a){ return a.toUpperCase(); } );
};

capitalize('this IS THE wOrst string eVeR');
"151910920 de sortie": "C'Est La Pire Chaîne de Toujours"

mise à jour:

il semble que cette solution remplace la mienne: https://stackoverflow.com/a/7592235/104380

28
répondu vsync 2017-05-23 12:26:36

Le réponse fournie par le vsync œuvres tant que vous n'avez pas de lettres accentuées dans la chaîne d'entrée.

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

une fonction plus générale que fonctionne aussi avec des 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() );
15
répondu Marco Demaio 2017-05-23 12:34:53

John Resig (de jQuery fame ) a porté un script perl, écrit par John Gruber, en 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

5
répondu meouw 2010-02-25 10:27:49

puisque tout le monde vous a donné la réponse JavaScript que vous avez demandé, je vais jeter dans que la propriété CSS text-transform: capitalize fera exactement cela.

je réalise que ce pourrait ne pas être ce que vous demandez - vous ne nous avez pas donné tout du contexte dans lequel vous exécutez ceci - mais si c'est juste pour la présentation, je serais certainement aller avec l'alternative CSS.

4
répondu David Hedlund 2010-02-25 09:18:45

utilisant JavaScript et html

String.prototype.capitalize = function() {
  return this.replace(/(^|\s)([a-z])/g, function(m, p1, p2) {
    return p1 + p2.toUpperCase();
  });
};
<form name="form1" method="post">
  <input name="instring" type="text" value="this is the text string" size="30">
  <input type="button" name="Capitalize" value="Capitalize >>" onclick="form1.outstring.value=form1.instring.value.capitalize();">
  <input name="outstring" type="text" value="" size="30">
</form>

en gros, vous pouvez faire string.capitalize() et il capitalisera chaque première lettre de chaque mot.

Source: http://www.mediacollege.com/internet/javascript/text/case-capitalize.html

4
répondu Buhake Sindi 2016-05-20 07:37:40

si vous utilisez lodash dans votre application JavaScript, vous pouvez utiliser _.majuscule :

console.log( _.capitalize('ÿöur striñg') );
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.min.js"></script>
3
répondu vicke4 2018-03-20 13:02:26

ma solution:

String.prototype.toCapital = function () {
    return this.toLowerCase().split(' ').map(function (i) {
        if (i.length > 2) {
            return i.charAt(0).toUpperCase() + i.substr(1);
        } else {
            return i;
        }
    }).join(' ');
};

exemple:

'álL riGht'.toCapital();
// Returns 'Áll Right'
1
répondu Erick Tatsui 2017-03-13 19:06:45

cela devrait couvrir la plupart des cas d'utilisation de base.

const capitalize = (str) => {
    if (typeof str !== 'string') {
      throw Error('Feed me string')
    } else if (!str) {
      return ''
    } else {
      return str
        .split(' ')
        .map(s => {
            if (s.length == 1 ) {
                return s.toUpperCase()
            } else {
                const firstLetter = s.split('')[0].toUpperCase()
                const restOfStr = s.substr(1, s.length).toLowerCase()
                return firstLetter + restOfStr
            }     
        })
        .join(' ')
    }
}


capitalize('THIS IS A BOOK') // => This Is A Book
capitalize('this is a book') // => This Is A Book
capitalize('a 2nd 5 hour boOk thIs weEk') // => A 2nd 5 Hour Book This Week

modifier: amélioration de la lisibilité de la cartographie.

1
répondu Drops 2018-08-30 12:21:19

http://www.mediacollege.com/internet/javascript/text/case-capitalize.html est l'une des nombreuses réponses.

Google peut être tout ce dont vous avez besoin pour de tels problèmes.

une approche naïve serait de diviser la chaîne par des espaces, de capitaliser la première lettre de chaque élément du tableau résultant et de la joindre à nouveau ensemble. Cela laisse les majuscules existantes seules (par ex. HTML reste HTML et ne devient pas quelque chose stupide comme le Html). Si vous ne voulez pas que l'affect, tourner la chaîne entière en minuscules avant de la diviser.

0
répondu Alan Plum 2010-02-25 09:14:29

ce code majuscule mots après point:

function capitalizeAfterPeriod(input) { 
    var text = '';
    var str = $(input).val();
    text = convert(str.toLowerCase().split('. ')).join('. ');
    var textoFormatado = convert(text.split('.')).join('.');
    $(input).val(textoFormatado);
}

function convert(str) {
   for(var i = 0; i < str.length; i++){
      str[i] = str[i].split('');
      if (str[i][0] !== undefined) {
         str[i][0] = str[i][0].toUpperCase();
      }
      str[i] = str[i].join('');
   }
   return str;
}
0
répondu Flavio 2016-08-23 15:02:39

j'aime aller avec le processus facile. Changez d'abord la chaîne de caractères en tableau pour une itération facile, puis en utilisant la fonction map, changez chaque mot comme vous le voulez.

function capitalizeCase(str) {
    var arr = str.split(' ');
    var t;
    var newt;
    var newarr = arr.map(function(d){
        t = d.split('');
        newt = t.map(function(d, i){
                  if(i === 0) {
                     return d.toUpperCase();
                    }
                 return d.toLowerCase();
               });
        return newt.join('');
      });
    var s = newarr.join(' ');
    return s;
  }
0
répondu Mritunjay Upadhyay 2017-05-09 08:39:50

Jquery ou Javascipt n'est pas de fournir une méthode intégrée pour atteindre cet objectif.

CSS test transform (text-transform: capitaliser;) ne capitalise pas vraiment les données de la chaîne, mais montre un rendu capitalisé sur l'écran.

si vous cherchez une façon plus légitime d'atteindre ce niveau de données en utilisant des vanillaJS simples, utilisez cette solution =>

var capitalizeString = function (word) {    
    word = word.toLowerCase();
    if (word.indexOf(" ") != -1) { // passed param contains 1 + words
        word = word.replace(/\s/g, "--");
        var result = $.camelCase("-" + word);
        return result.replace(/-/g, " ");
    } else {
    return $.camelCase("-" + word);
    }
}
0
répondu Siwalik 2017-07-24 17:39:08

Utilisez Ceci:

String.prototype.toTitleCase = function() {
  return this.charAt(0).toUpperCase() + this.slice(1);
}

let str = 'text';
document.querySelector('#demo').innerText = str.toTitleCase();
<div class = "app">
  <p id = "demo"></p>
</div>
0
répondu Sanjay 2018-04-10 09:07:31

vous pouvez utiliser ce qui suit pour capitaliser des mots dans une chaîne de caractères:

function capitalizeAll(str){

    var partes = str.split(' ');

    var nuevoStr = ""; 

    for(i=0; i<partes.length; i++){
    nuevoStr += " "+partes[i].toLowerCase().replace(/\b\w/g, l => l.toUpperCase()).trim(); 
    }    

    return nuevoStr;

}
0
répondu Marcos Torres 2018-09-25 01:58:10