2011-02-02 14 views

Respuesta

467

Hay una buena respuesta here:

function toTitleCase(str) 
{ 
    return str.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();}); 
} 
+0

gracias dexter esta solución funciona perfectamente para mis necesidades – pepe

+3

preguntando (podría ser una pregunta para principiantes) pero ¿cómo sabe javascript que el parámetro txt in 'function (txt)' se está refiriendo a 'str'? ¿Es porque estás llamando 'replace' en' str' para que pueda suponer eso? – aug

+4

en realidad no está pasando 'str' - está pasando en la" subcadena coincidente "- por ej. el resultado de la expresión regular. Hay una buena explicación en las páginas dev de Mozilla en https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/replace, bajo el título 'Especificar una función como parámetro' – Dexter

115

Puede utilizar CSS:

p.capitalize {text-transform:capitalize;} 
+2

http://www.w3schools.com/css/pr_text_text-transform.asp – hunter

+1

Gracias por la adición de mi fuente;) – capdragon

+2

gracias capdragon - pero necesito los nombres de ciudades que pueden cambiar en el lado del cliente y se guarda en el base de datos en mayúsculas: no creo que CSS lo permita, ¿verdad? – pepe

5

La función de JavaScript:

String.prototype.capitalize = function(){ 
     return this.replace(/(^|\s)([a-z])/g , function(m,p1,p2){ return p1+p2.toUpperCase(); }); 
     }; 

Para utilizar esta función:

capitalizedString = someString.toLowerCase().capitalize(); 

Además, esto funcionaría en varias cadenas de palabras.

Para asegurarse de que el nombre de ciudad convertido se inyecta en la base de datos, en minúscula y con la primera letra en mayúscula, deberá usar JavaScript antes de enviarlo al lado del servidor. Estilos CSS simples, pero los datos reales se mantendrán prediseñados. Eche un vistazo a este ejemplo de jsfiddle y compare el mensaje de alerta con el resultado con estilo.

+2

Parece correcto, pero no agregue esto a 'String.prototype'. –

+0

'if (! String.prototype.toTitleCase) { String.prototype.toTitleCase = function() { return this.toLowerCase(). Replace (/ (^ | \) ([az])/g, función (m, p1, p2) {return p1 + p2.toUpperCase();}); }; } 'si desea agregar a String.prototype y agregar un toLowerCase() – user1071182

+0

No funciona con acentos, como" Úrsula " –

17
function convert_case(str) { 
    var lower = str.toLowerCase(); 
    return lower.replace(/(^|)(\w)/g, function(x) { 
    return x.toUpperCase(); 
    }); 
} 
+2

O, un poco más elegante: ' str.toLowerCase(). Replace (/ (^ |) (\ w)/g, String.toUpperCase) ' – rakensi

+1

El comentario de @ enver no funcionará ya que' String.toUpperCase' se vinculará al objeto 'String' (' this' será 'String', no la subcadena) – kikito

+0

Eso es absolutamente correcto. Mis disculpas por no probar esto, y suponiendo que funcionaría. – rakensi

Cuestiones relacionadas