¿Cuál es el mejor enfoque para capitalizar palabras en una cadena?
javascript
string
capitalization
vsync
fuente
fuente
text-transform:capitalize;
.Respuestas:
fuente
'CHECK THIS OUT'.capitalize(true) -> "Check This Out"
.true
Parámetro mental .La implementación más corta para capitalizar palabras dentro de una cadena es la siguiente usando las funciones de flecha de ES6:
Implementación compatible con ES5:
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:
Para caracteres no ASCII, consulte esta solución en su lugar
Esta expresión regular coincide con la primera letra y todas las letras que no son espacios en blanco precedidas por espacios en blanco dentro de la cadena dada y transforma solo esa letra en mayúsculas:
Un grupo no capturador podría haberse utilizado aquí de la siguiente manera,
/(?:^|\s)\S/g
aunqueg
bandera dentro de nuestra expresión regular no capturará subgrupos por diseño de todos modos.¡Salud!
fuente
päijät-häme
se hacePäIjäT-HäMe
EisbäRen
es un resultado, por ejemplo.Päijät-Häme
, pero al menos en el espacio en blanco de Chrome no incluye el guión (-), por lo que la segunda parte del nombre no está en mayúscula. Se puede arreglar como/(^|\s|-)\S/g
.salida: "Esta es la peor cadena de la historia"
Actualizar:
Parece que esta solución reemplaza a la mía: https://stackoverflow.com/a/7592235/104380
fuente
La respuesta proporcionada por vsync funciona siempre que no tenga letras acentuadas en la cadena de entrada.
No sé la razón, pero aparentemente las
\b
coincidencias en regexp también coinciden con letras acentuadas (probadas en IE8 y Chrome), por lo que una cadena como"località"
se capitalizaría erróneamente convertida en"LocalitÀ"
(laà
letra se capitaliza porque la expresión regular piensa que es un límite de palabra)Una función más general que funciona también con letras acentuadas es esta:
Puedes usarlo así:
fuente
" javascript".toCapitalize() -> " javascript"
Como todos le han dado la respuesta de JavaScript que solicitó, agregaré la propiedad CSS
text-transform: capitalize
hará exactamente esto.Me doy cuenta de que esto podría no ser lo que estás pidiendo, no nos has dado nada del contexto en el que estás ejecutando esto, pero si es solo para una presentación, definitivamente elegiría la alternativa CSS.
fuente
John Resig (de jQuery fame) portó un script en perl, escrito por John Gruber, a JavaScript. Este script capitaliza de una manera más inteligente, no capitaliza palabras pequeñas como 'de' y 'y' por ejemplo.
Puede encontrarlo aquí: Capitalización de títulos en JavaScript
fuente
Usando JavaScript y HTML
Básicamente, puedes hacer
string.capitalize()
y capitalizará cada 1ra letra de cada palabra.Fuente: http://www.mediacollege.com/internet/javascript/text/case-capitalize.html
fuente
if (object.capitalize) {...} else {String.prototype.capitalize = function()....}
donde objeto es de tipoString
. Entonces, es bastante simple en realidad.La respuesta de Ivo es buena, pero prefiero no coincidir
\w
porque no hay necesidad de capitalizar 0-9 y AZ. Podemos ignorarlos y solo coincidir en az.Es el mismo resultado, pero creo que más claro en términos de código autodocumentado.
fuente
"Är Toaletten"
. Su respuesta, contestó años después se había proporcionado muy buenos, no contribuye a la discusión ../\b\w/g
también falla para letras que no están en inglés. No todos tratan con caracteres Unicode, y esto ayudará a aquellos que quieran no hacerlo.Si está usando lodash en su aplicación JavaScript, puede usar _.capitalize :
fuente
Una forma concisa de hacerlo en ES6 podría verse así.
Esto solo pone en mayúscula la primera letra y no afecta el resto de la carcasa de la oración.
fuente
Mi solución:
Ejemplo:
fuente
'a áAA. bb . bbb .cc .d'.toCapital();
=>a Áaa. bb . Bbb .cc .d
Esto debería cubrir la mayoría de los casos de uso básicos.
Editar: Legibilidad mejorada de mapeo.
fuente
/\b\w/g
...Esta solución no utiliza expresiones regulares, admite caracteres acentuados y también es compatible con casi todos los navegadores.
Uso:
Salida:
fuente
http://www.mediacollege.com/internet/javascript/text/case-capitalize.html es una de las muchas respuestas disponibles.
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 nuevamente. Esto deja solo las mayúsculas existentes (por ejemplo, HTML sigue siendo HTML y no se convierte en algo tonto como Html). Si no desea ese efecto, convierta toda la cadena en minúsculas antes de dividirla.
fuente
Este código capitaliza las palabras después del punto:
fuente
Me gusta ir con un proceso fácil. Primero cambie la cadena a Array para una iteración fácil, luego, usando la función de mapa, cambie cada palabra como desee.
fuente
Jquery o Javascipt no proporcionan un método integrado 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 vanillaJS simple, use esta solución =>
fuente
Utilizar este:
fuente
Puede usar lo siguiente para poner en mayúscula las palabras en una cadena:
fuente
También hay locutus: https://locutus.io/php/strings/ucwords/ que lo define de esta manera:
fuente
Yo usaría regex para este propósito:
fuente