2011-09-19 57 views
15

Quiero usar una función de JavaScript para capitalizar la primera letra de cada palabramayúscula la primera letra de cada palabra

por ejemplo:

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

Lo que sería una simple función de JavaScript

+0

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

+0

Dé vuelta a la minúscula, corte en palabras individuales dividiendo por espacios en blanco, toUpperCase() en el primer carácter de cada palabra. – bdares

+2

@ reader_1000: esta pregunta es acerca uppercasing sólo el primer carácter de una cadena, mientras que esto se trata de uoppercasing el primer carácter de cada palabra (cosa que está mucho más complicado y necesita una solución diferente) – oezi

Respuesta

1

toma un vistazo a ucwords from php.js - esto parece ser algo de lo que estás buscando. Básicamente, es:

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

nota que THIS IS A TEST volverá THIS IS A TEST por lo que tendrá que utilizar de esta manera:

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

o modificar la función de un poco:

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

Esto no funcionará para las letras que no sean ASCII. – Joey

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

Otra 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

Esto funciona también si la primera letra está acentuada – coorasse

33

He aquí un pequeño chiste que yo estoy usando para hacer el trabajo

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

pero John Resig hizo un guión bastante impresionante que maneja una gran cantidad de casos http://ejohn.org/blog/title-capitalization-in-javascript/

Actualización

ES6 + respuesta:

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

Probablemente haya una manera mejor que esta. Funcionará en caracteres acentuados.

+4

Me encanta lo simple y sucinta que es esta. –

+0

muy buen código. simple y eficiente. – user3658423

+1

esto no funciona si la primera letra tiene un acento – coorasse

1

Esto capitalizar cada palabra separados por un espacio o un guión

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

Ejemplos:

  • ¡amo las naranjas => I Love Naranjas
  • un extraño aspecto de sintaxis => A Sintaxis de aspecto extraño

etc

4

Esta es una solución simple que descompone la oración en una matriz, luego recorre la matriz creando una nueva matriz con las palabras en mayúscula.

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 para facilitar la lectura – iamwhitebox

1

Si no les importa usar una biblioteca, se puede usar Sugar.jscapitalize()

capitalizar (todo = false) capitaliza el primer carácter de la cadena y downcases todas las otras letras. Si todo es verdadero, todas las palabras en la cadena se escriben en mayúscula.

Ejemplo:

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

también se puede utilizar a continuación el enfoque utilizando 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 
Cuestiones relacionadas