Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

[Projeto] desafio do palíndromo

Resolvi explorar esse exercício do palíndromo com um prompt pra explorar a experiencia do usuário, além disso, no enunciado pede que seja uma palavra ou frase, dessa maneira eu usei toLowerCase, pra capturar o valor inserido sem espaços, trabalhei dessa forma pra abraçar também frases. Tentei ao máximo criar uma função complementar que permita somente a inserção de valores que não sejam números, porém não consegui.

verificandoSeEPalíndromo();

function verificandoSeEPalíndromo() {
    let palavraOufrase = prompt ('Escreva uma palavra ou frase:');
    palavraOufrase.toLowerCase;
    
    if (palavraOufrase === ''){
        alert ('Por favor escreva uma palavra ou frase.');
        verificandoSeEPalíndromo();
    }
    
    let separandoAsLetras = palavraOufrase.split('');
    let palavraOuFraseInvertida = separandoAsLetras.reverse();
    palavraOuFraseInvertida = palavraOuFraseInvertida.join('');
    if (palavraOufrase == palavraOuFraseInvertida) {
        alert (`A palavra ou frase: ${palavraOufrase} é um palíndromo.`);
    } else {
        alert (`A palavra ou frase: ${palavraOufrase} não é um palíndromo.`);
    }
}
3 respostas

Olá, Alexandre. Tudo bem?

Muito obrigado por compartilhar o seu código aqui com a gente. Parabéns pelo trabalho. Continue com essa dedicação.

Ótimo como você utilizou toLowerCase() para considerar frases inteiras, mas note que ele precisa ser chamado como função: palavraOufrase.toLowerCase(). Além disso, a validação poderia impedir números de forma mais direta.

Veja este exemplo de como filtrar apenas letras antes de verificar o palíndromo:


function verificandoSeEPalindromo() {
    let entrada = prompt('Escreva uma palavra ou frase:').toLowerCase();
    
    let apenasLetras = entrada.replace(/[^a-zà-ú]/g, '');
    
    let invertida = apenasLetras.split('').reverse().join('');
    
    if (apenasLetras === invertida) {
        alert(`"${entrada}" é um palíndromo.`);
    } else {
        alert(`"${entrada}" não é um palíndromo.`);
    }
}

verificandoSeEPalindromo();

Isso remove números e espaços automaticamente. Teste e veja como funciona.

Conte com o apoio do Fórum. Abraços e bons estudos.

Obrigado pela ajuda Renan, você consegue me explicar melhor como funciona essa linha let apenasLetras = entrada.replace(/[^a-zà-ú]/g, '');? Principalmente o que está entre parênteses, eu encontrei algo parecido quando pesquisei uma possível solução, porém não utilizei, pois não entendi como funciona.

solução!

Olá, Alexandre.

Sobre sua dúvida, a expressão regular /[^a-zà-ú]/g serve para remover todos os caracteres que não sejam letras.

Explicando cada parte:

  • [^...] → O ^ dentro dos colchetes indica uma negação, ou seja, "não seja" qualquer um dos caracteres listados.
  • a-z → Considera todas as letras minúsculas de a a z.
  • à-ú → Inclui os caracteres acentuados do português.
  • /g → O modificador g (global) faz com que a substituição ocorra em toda a string, e não apenas na primeira ocorrência.

A função .replace(/[^a-zà-ú]/g, '') então substitui todos os caracteres que não são letras por uma string vazia, removendo números, espaços e pontuações.

Veja este exemplo para entender melhor:


let entrada = "Ame a ema, 123!"; 
let apenasLetras = entrada.replace(/[^a-zà-ú]/g, ''); 

console.log(apenasLetras); // Saída: "ameaema"

Isso garante que apenas as letras sejam consideradas ao verificar o palíndromo.

Fico à disposição. Abraços e bons estudos.