Comparto mi código JS
let titulo = document.querySelector('h1');
titulo.innerHTML = "Hora del desafío";
function botonConsola(){
alert("El botón \"Console\" fue clicado.");
}
function titleCase(str){
return str
.toLowerCase()
.split(" ")
.map((word) => word.charAt(0).toUpperCase() + word.slice(1))
.join(" ");
}
function botonPrompt(){
while (true){
let nombreCiudad = prompt("Ingresa el nombre de una ciudad de Brasil: ");
if(nombreCiudad === null){
break;
}
if (/^[a-zA-ZáéíóúÁÉÍÓÚ\s]+$/.test(nombreCiudad)){
console.log("Nombre de ciudad válido.",nombreCiudad);
nombreCiudad = titleCase(nombreCiudad);
alert(`Estuve en ${nombreCiudad} y me acordé de tí.`)
break;
}else{
alert("Nombre de ciudad inválido, por favor ingresa solo letras y espacios.");
}
}
}
function botonAlerta(){
alert("Yo amo JS");
}
function botonSuma(){
let numero1;
let numero2;
while(isNaN(numero1)){
numero1 = parseFloat(prompt("Ingrese el primer número: "));
if(isNaN(numero1)){
alert("Valor ingresado inválido, ingrese solo números.");
}
}
while(isNaN(numero2)){
numero2 = parseFloat(prompt("Ingrese el segundo número: "));
if(isNaN(numero2)){
alert("Valor ingresado inválido, ingrese solo números.");
}
}
let sumatoria = numero1 + numero2;
alert(`El resultado de la suma de:\n${numero1} + ${numero2} = ${sumatoria}`)
}
En este caso me di a la tarea de investigar cómo podía validar si el texto que se ingresaba no incluía números o caracteres especiales y descubrí que con la expresión regular /^[a-zA-ZáéíóúÁÉÍÓÚ\s]+$/ se evalúa que la cadena pudiera contener letras del alfabeto en mayúsculas y minúsculas, así como las letras acentuadas mayúsculas y minúsculas y espacios representado con \s.
De manera similar para el ingreso de números descubrí que existe el método isNaN(numero) cuya abreviación del método proviene de Not a Number, por lo que si no es un número lo que se evalúa emitirá un mensaje de error y volverá a solicitar el número debido al while que también evalúa si la variable no es un número.