Stack Overflow en español Asked by Stewie on October 14, 2020
El caso es que tengo este código y solo me convierte la primera letra. El caso es que yo quiero que me convierta las primeras letras de cada palabra y no se como hacerlo.
document.write("Nombre y apellidos<input type='text' id='datos'><br>");
document.write("<input type='button' value='Convertir' onclick='mostrarPalabra()'><br>");
function mostrarPalabra() {
var datos = document.getElementById('datos').value;
datos = convertir(datos.toLowerCase());
console.log(datos);
}
function convertir(string) {
return string.charAt(0).toUpperCase() + string.slice(1);
}
cadena="hello world"
'-------------SEPARAMOS LAS PALABRAS
cadenaArr=split(cadena, " ")
'-------------RECORREMOS EL ARRAY RESULTANTE
for i=0 to ubound(cadenaArr)
palabra=cadenaArr(i)
palabra=ucase(left(palabra,1)) & lcase(right(palabra, len(palabra)-1))
cadenaFinal=cadenaFinal & palabra & " "
next
response.write cadenaFinal '---(Hello World)
Answered by Miquel Garcia on October 14, 2020
const first_letter_uppercase_word = str => {
return str.toLowerCase().replace(/b[a-z]/g, c => c.toUpperCase())
}
first_letter_uppercase_word("HELLO worlD")
Example: Hello World
Answered by Kjsh Company on October 14, 2020
Viendo las respuesta dada, te daré una solución sin usar regex
.
Características de la función:
function capitalizarPalabras( val ) {
return val.toLowerCase()
.trim()
.split(' ')
.map( v => v[0].toUpperCase() + v.substr(1) )
.join(' ');
}
console.log( capitalizarPalabras( 'hola' ) );
console.log( capitalizarPalabras( ' hola' ) ); // Empieza con un espacio
console.log( capitalizarPalabras( 'hola mundo ' ) );
console.log( capitalizarPalabras( 'ñoño óle' ) );
console.log( capitalizarPalabras( '1 ñoño óle' ) );
console.log( capitalizarPalabras( ' über öll mi au' ) );
console.log( capitalizarPalabras( 'algun texto sin sentido. y este aún menos. ' ) );
Answered by Black Sheep on October 14, 2020
Hagamos una solución en castellano con expresiones regulares.
Sobre las letras del español:
Para las expresiones regulares en JavaScript, lañ
y los acentos no son caracteres de palabra1.
1: No están incluidos enw
, y por endeb
los toma mal
En JavaScript2, tenemos que hacer que coincida con el caracter previo (o el inicio del string) e incluirlo en el reemplazo, seguido de una letra en minúsculas.
2: Porque en JavaScript no hay inspecciones hacia atrás (lookbehinds), como sí hay en otros dialectos de regex.
Para capitalizar las minúsculas al inicio de cada palabra:
const re = /(^|[^A-Za-zÁÉÍÓÚÜÑáéíóúüñ])([a-záéíóúüñ])/g;
texto.replace(re, function(match, caracterPrevio, minuscula) {
return caracterPrevio + minuscula.toLocaleUpperCase(['es', 'gl', 'ca', 'pt', 'en']);
});
Y, además, podemos llevar a minúsculas todo el resto, haciendo:
Solución:
function titleCase(texto) {
const re = /(^|[^A-Za-zÁÉÍÓÚÜÑáéíóúüñ])(?:([a-záéíóúüñ])|([A-ZÁÉÍÓÚÜÑ]))|([A-ZÁÉÍÓÚÜÑ]+)/gu;
return texto.replace(re,
(m, caracterPrevio, minuscInicial, mayuscInicial, mayuscIntermedias) => {
const locale = ['es', 'gl', 'ca', 'pt', 'en'];
if (mayuscIntermedias)
return mayuscIntermedias.toLocaleLowerCase(locale);
return caracterPrevio
+ (minuscInicial ? minuscInicial.toLocaleUpperCase(locale) : mayuscInicial);
}
);
}
Descripción:
/(^|[^A-Za-zÁÉÍÓÚÜÑáéíóúüñ])(?:([a-záéíóúüñ])|([A-ZÁÉÍÓÚÜÑ]))|([A-ZÁÉÍÓÚÜÑ]+)/gu
Son 2 alternativas en un OR: /1|2/gu
(^|[^A-Za-zÁÉÍÓÚÜÑáéíóúüñ])(?:([a-záéíóúüñ])|([A-ZÁÉÍÓÚÜÑ]))
- LETRA INICIAL.
(^|[^A-Za-zÁÉÍÓÚÜÑáéíóúüñ])
- Inicio del texto o cualquier caracter que no sea alfabético.caracterPrevio
.(?:([a-záéíóúüñ])|([A-ZÁÉÍÓÚÜÑ]))
- La primera letra de la palabra, ya sea:([a-záéíóúüñ])
- letra en minúscula => se pasa como la variable minuscInicial
, o([A-ZÁÉÍÓÚÜÑ])
- letra en mayúscula => se pasa como la variable mayuscInicial
.([A-ZÁÉÍÓÚÜÑ]+)
- MAYÚSCULAS INTERMEDIAS
Cuando coincide con esta parte, significa que no coincidió con la primera. Por lo tanto, sabemos que no es una letra al inicio de una palabra, sino una letra intermedia.
[A-ZÁÉÍÓÚÜÑ]+
coincide con 1 o más letras en mayúsculas (no iniciales), de modo que podemos llevarlas a minúsculas.mayuscIntermedias
.
Demo:
//Leva a mayúsculas la primera letra de cada palabra
function titleCase(texto) {
const re = /(^|[^A-Za-zÁÉÍÓÚÜÑáéíóúüñ])(?:([a-záéíóúüñ])|([A-ZÁÉÍÓÚÜÑ]))|([A-ZÁÉÍÓÚÜÑ]+)/gu;
return texto.replace(re,
(m, caracterPrevio, minuscInicial, mayuscInicial, mayuscIntermedias) => {
const locale = ['es', 'gl', 'ca', 'pt', 'en'];
//Son letras mayúsculas en el medio de la palabra
// => llevar a minúsculas.
if (mayuscIntermedias)
return mayuscIntermedias.toLocaleLowerCase(locale);
//Es la letra inicial de la palabra
// => dejar el caracter previo como está.
// => si la primera letra es minúscula, capitalizar
// sino, dejar como está.
return caracterPrevio
+ (minuscInicial ? minuscInicial.toLocaleUpperCase(locale) : mayuscInicial);
}
);
}
//Evento para mostrar el resultado cada vez que se ingresa un caracter
document.getElementById('ingreso')
.addEventListener('input',
event => {
document.getElementById('resultado')
.innerText = titleCase(event.target.value);
}
);
<input type="text"
id="ingreso"
placeholder="Escribí texto para llevar a mayúsculas la primera letra de cada palabra"
style="width:100%">
<pre id="resultado">
Answered by Mariano on October 14, 2020
Usando, replace(), expresiones regulares y funciones flecha de ES6
console.log('kdz stack overflow'.replace(/b[a-z]/g,c=>c.toUpperCase()));
Answered by Eduardo Sebastian on October 14, 2020
La implementación más corta para capitalizar palabras dentro de una cadena es la siguiente utilizando las funciones Arrow de ES6:
'your string'.replace(/bw/g, l => l.toUpperCase())
// => 'Your String'
Implementación compatible con ES5:
'your string'.replace(/bw/g, function(l){ return l.toUpperCase() })
// => 'Your String'
La expresión regular 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].
Answered by farsSharp on October 14, 2020
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP