javascript - first - Escribe mayúsculas en las palabras
lodash capitalize first letter (14)
¿Cuál es el mejor enfoque para capitalizar palabras en una cadena?
Si está utilizando lodash en su aplicación de JavaScript, puede usar _.capitalize :
console.log( _.capitalize(''ÿöur striñg'') );
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.min.js"></script>
Como todos le han dado la respuesta de JavaScript que ha solicitado, le mostraré que la propiedad de CSS text-transform: capitalize
hará exactamente esto.
Me doy cuenta de que puede que esto no sea lo que estás pidiendo, no nos has dado el contexto en el que estás ejecutando esto, pero si solo es para la presentación, definitivamente elegiré la alternativa de CSS.
Este código escribe en mayúscula las palabras después del punto:
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;
}
John Resig (de jQuery fame) portó un guión de perl, escrito por John Gruber, a JavaScript. Este script se capitaliza de una manera más inteligente, no usa palabras pequeñas como "de" y "y", por ejemplo.
Puede encontrarlo aquí: Capitalización del título en JavaScript
Jquery o Javascipt no proporcionan un método incorporado para lograr esto.
La transformación de prueba CSS (text-transform: capitalize;) realmente no capitaliza los datos de la cadena pero muestra una representación en mayúscula en la pantalla.
Si está buscando una forma más legítima de lograr esto en el nivel de datos usando plain vanillaJS, use esta solución =>
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);
}
}
La respuesta proporcionada por vsync funciona siempre que no tenga letras acentuadas en la cadena de entrada.
No sé la razón, pero aparentemente los /b
en los partidos de "LocalitÀ"
también acentuaron las letras (probadas en IE8 y Chrome), por lo que una cadena como "località"
se capitalizaría erróneamente y se convertiría en "LocalitÀ"
(la letra à
se escribe en mayúscula la expresión regular cree que es un límite de palabras)
Una función más general que funciona también con letras acentuadas es esta:
String.prototype.toCapitalize = function()
{
return this.toLowerCase().replace(/^.|/s/S/g, function(a) { return a.toUpperCase(); });
}
Puedes usarlo así:
alert( "hello località".toCapitalize() );
La implementación más corta para capitalizar palabras dentro de una cadena es la siguiente utilizando las funciones de flecha de ES6:
''your string''.replace(//b/w/g, l => l.toUpperCase())
// => ''Your String''
Implementación compatible con ES5:
''your string''.replace(//b/w/g, function(l){ return l.toUpperCase() })
// => ''Your String''
La expresión regular básicamente coincide con la primera letra de cada palabra dentro de la cadena dada y transforma solo esa letra en mayúscula:
- /b coincide con un límite de palabra (el comienzo o el final de la palabra);
- /w coincide con el siguiente metacaracteres [a-zA-Z0-9].
Para caracteres que no son ASCII, consulte esta solución en su lugar
''ÿöur striñg''.replace(/(^|/s)/S/g, l => l.toUpperCase())
Esta expresión regular coincide con la primera letra y con cada letra que no sea de espacios en blanco precedida de espacios en blanco dentro de la cadena dada y transforma solo esa letra en mayúscula:
- /s coincide con un carácter de espacio en blanco
- /S coincide con un carácter que no sea de espacio en blanco
- (x|y) coincide con cualquiera de las alternativas especificadas
Un grupo que no capturó podría haberse utilizado aquí de la siguiente manera /(?:^|/s)/S/g
aunque la bandera g
dentro de nuestra expresión regular no capturará subgrupos por diseño de todos modos.
¡Aclamaciones!
Me gusta ir con un proceso fácil. Primero, cambie la cadena por Array para facilitar la iteración, luego use la función de mapa para cambiar cada palabra como quiera que sea.
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;
}
Mi solución:
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('' '');
};
Ejemplo:
''álL riGht''.toCapital();
// Returns ''Áll Right''
Usando JavaScript y 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>
Básicamente, puedes hacer string.capitalize()
y capitalizará cada primera letra de cada palabra.
Fuente: http://www.mediacollege.com/internet/javascript/text/case-capitalize.html
Utilizar esta:
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>
http://www.mediacollege.com/internet/javascript/text/case-capitalize.html es una de las muchas respuestas que hay.
Google puede ser todo lo que necesita para tales problemas.
Un enfoque ingenuo sería dividir la cadena por espacios en blanco, poner en mayúscula la primera letra de cada elemento de la matriz resultante y unirla de nuevo. Esto deja la capitalización existente sola (por ejemplo, HTML se mantiene HTML y no se convierte en algo tonto como Html). Si no quiere ese efecto, convierta toda la cadena en minúscula antes de dividirla.
String.prototype.capitalize = function() {
return this.replace(/(?:^|/s)/S/g, function(a) { return a.toUpperCase(); });
};
Uso:
''your string''.capitalize(); // -> ''Your String''
corrige la solución de Marco Demaio donde la primera letra con un espacio anterior no está en mayúscula.
'' javascript''.capitalize(); // -> '' Javascript''
puede manejar símbolos nacionales y letras acentuadas.
''бабушка курит трубку''.capitalize(); // -> ''Бабушка Курит Трубку'' ''località àtilacol''.capitalize() // -> ''Località Àtilacol''
ADD-ON lo encuentro útil
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''
function capitalize(s){
return s.toLowerCase().replace( //b./g, function(a){ return a.toUpperCase(); } );
};
capitalize(''this IS THE wOrst string eVeR'');
salida: "Esta es la peor cadena de mi vida"
Actualizar:
Parece que esta solución reemplaza a la mía: https://.com/a/7592235/104380