2011-09-19 5 views
15

Je veux utiliser une fonction javascript pour tirer parti de la première lettre de chaque motCapitaliser la première lettre de chaque mot

par exemple:

THIS IS A TEST ---> This Is A Test 
this is a TEST ---> This Is A Test 
this is a test ---> This Is A Test 

Quelle serait une simple fonction javascript

+0

http://stackoverflow.com/questions/1026069/capitalize-the-first-letter- of-string-in-javascript –

+0

Basculer en minuscules, couper en mots individuels en divisant par des espaces, toUpperCase() sur le premier caractère de chaque mot. – bdares

+2

@ reader_1000: cette question concerne la mise en majuscule du premier caractère d'une chaîne alors que cela concerne le premier caractère de chaque mot (ce qui est beaucoup plus compliqué et nécessite une solution différente) – oezi

Répondre

1

prendre un regard sur ucwords from php.js - cela semble être un peu ce que vous cherchez. Au fond, il est:

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

Notez que THIS IS A TEST retournera THIS IS A TEST donc vous devrez l'utiliser comme ceci:

var oldstring = "THIS IS A TEST"; 
var newstring = ucwords(oldstring.toLowerCase()); 

ou modifier la fonction un peu:

function ucwords (str) { 
    str = (str + '').toLowerCase(); 
    return str.replace(/^([a-z])|\s+([a-z])/g, function ($1) { 
     return $1.toUpperCase(); 
    }); 
} 
var oldstring = "THIS IS A TEST"; 
var newstring = ucwords(oldstring); // This Is A Test 
+0

Ceci ne fonctionnera pas pour les lettres non-ASCII. – Joey

5
"tHiS iS a tESt".replace(/[^\s]+/g, function(str){ 
    return str.substr(0,1).toUpperCase()+str.substr(1).toLowerCase(); 
    }); 

Autre variante:

"tHiS iS a tESt".replace(/(\S)(\S*)/g, function($0,$1,$2){ 
    return $1.toUpperCase()+$2.toLowerCase(); 
    }); 
8
function capitalizeEachWord(str) 
{ 
    var words = str.split(" "); 
    var arr = []; 
    for (i in words) 
    { 
     temp = words[i].toLowerCase(); 
     temp = temp.charAt(0).toUpperCase() + temp.substring(1); 
     arr.push(temp); 
    } 
    return arr.join(" "); 
} 
+0

Cela fonctionne aussi si la première lettre est accentuée – coorasse

33

Voici un petit paquebot que j'utilise pour faire le travail

var str = 'this is an example'; 
str.replace(/\b./g, function(m){ return m.toUpperCase(); }); 

mais John Resig a fait un script assez impressionnant qui gère un grand nombre de cas http://ejohn.org/blog/title-capitalization-in-javascript/

Mise à jour

ES6 + réponse:

str.split(' ').map(s => s.charAt(0).toUpperCase() + s.slice(1)).join(' ');

Il existe probablement un moyen encore meilleur. Cela fonctionnera sur les caractères accentués.

+4

J'adore la simplicité et la concision de cette lettre. –

+0

très bon code. simple et efficace. – user3658423

+1

cela ne fonctionne pas si la première lettre a un accent – coorasse

1

Ce capitalisera chaque mot séparé par un espace ou un tiret

function capitalize(str){ 
    str = str.toLowerCase(); 
    return str.replace(/([^ -])([^ -]*)/gi,function(v,v1,v2){ return v1.toUpperCase()+v2; }); 
} 

Exemples:

  • i lOvE orangés => I Love Oranges
  • une syntaxe STRANGE PROSPECTIFS => A Strange-Looking Syntaxe

etc

4

Ceci est une solution simple qui décompose la phrase en un tableau, puis boucle dans le tableau en créant un nouveau tableau avec les mots en majuscule.

function capitalize(str){ 

    var strArr = str.split(" "); 
    var newArr = []; 

    for(var i = 0 ; i < strArr.length ; i++){ 

    var FirstLetter = strArr[i].charAt(0).toUpperCase(); 
    var restOfWord = strArr[i].slice(1); 

    newArr[i] = FirstLetter + restOfWord; 

    } 

    return newArr.join(' '); 

} 
+0

+1 pour la lisibilité – iamwhitebox

1

Si vous ne me dérange pas utiliser une bibliothèque, vous pouvez utiliser Sugar.jscapitalize()

capitalisent (all = false) majuscule le premier caractère dans la chaîne et downcases toutes les autres lettres. Si tout est vrai, tous les mots de la chaîne seront mis en majuscule.

Exemple:

'hello kitty'.capitalize()  -> 'Hello kitty' 
'hello kitty'.capitalize(true) -> 'Hello Kitty' 
1

vous pouvez également utiliser ci-dessous approche par filtre:

function Ucwords(str){ 
    var words = str.split(' '); 
    var arr = []; 
    words.filter(function(val){ 
     arr.push(val.charAt(0).toUpperCase()+ val.substr(1).toLowerCase());    
    }) 
    console.log(arr.join(" ").trim()); 
    return arr.join(" ").trim(); 
} 

Ucwords("THIS IS A TEST") //This Is A Test 

Ucwords("THIS ") //This 
Questions connexes