2011-09-19 23 views
15

Voglio usare una funzione javascript per capitalizzare la prima lettera di ogni parolamaiuscolo la prima lettera di ogni parola

esempio:

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

Quale potrebbe essere una semplice funzione javascript

+0

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

+0

Passa alle lettere minuscole, taglia in singole parole dividendo per spazio, toUpperCase() sul primo carattere di ogni parola. – bdares

+2

@ reader_1000: questa domanda riguarda il maiuscolo solo il primo carattere di una stringa, mentre si tratta di aumentare il primo carattere di ogni parola (che è molto più complicato e ha bisogno di una soluzione diversa) – oezi

risposta

1

take un'occhiata a ucwords from php.js - questo sembra essere quello che stai cercando. In sostanza, si tratta di:

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

nota che THIS IS A TEST tornerà THIS IS A TEST quindi dovrete usare in questo modo:

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

o modificare la funzione di un po ':

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

Questo non funzionerà con lettere non ASCII. – Joey

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

Altre varianti:

"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

Funziona anche se la prima lettera è accentata – coorasse

33

Ecco un piccolo uno di linea che sto usando per ottenere il lavoro fatto

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

ma John Resig ha fatto uno script abbastanza impressionante che gestisce molti casi http://ejohn.org/blog/title-capitalization-in-javascript/

Aggiornamento

ES6 + risposta:

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

C'è probabilmente un modo migliore di questo. Funzionerà su personaggi accentati.

+4

Mi piace quanto questo sia semplice e succinto. –

+0

codice molto buono. semplice ed efficiente. – user3658423

+1

questo non funziona se la prima lettera ha un accento – coorasse

1

Ciò capitalizzare ogni parola separati da uno spazio o un trattino

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

Esempi:

  • io amo le arance => Ti amo Arance
  • un dall'aspetto strano sintassi => A Sintassi dall'aspetto strano

ecc.

4

Questa è una soluzione semplice che suddivide la frase in una matrice, quindi scorre l'array creando una nuova matrice con le parole in maiuscolo.

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 per la leggibilità – iamwhitebox

1

Se non ti dispiace utilizzando una libreria, è possibile utilizzare Sugar.jscapitalize()

capitalizzare (tutto = false) maiuscola la prima carattere della stringa e downcases tutte le altre lettere. Se tutto è true, tutte le parole in la stringa saranno in maiuscolo.

Esempio:

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

è possibile utilizzare anche sotto approccio con filtro:

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 
Problemi correlati