Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
3
respostas

ficou igual

senha = [1,2,3,4,5,6];

for (i = 0 ; i < senha.length; i++) {
    console.log(`Caractere ${i + 1}: ${senha[i]}`)
}
3 respostas

Oi, Tairone. Tudo bem com você?

A sua resolução para percorrer e exibir os caracteres com o laço for funcionou perfeitamente e atende à proposta da atividade. O cálculo de ${i + 1} dentro da template string foi uma excelente escolha para apresentar a contagem de forma amigável ao usuário, iniciando a exibição a partir do número 1 em vez do índice zero.

Um detalhe técnico importante sobre as boas práticas do JavaScript moderno é sempre declarar as variáveis com const ou let, evitando criar variáveis globais acidentais no escopo. No seu código, você pode declarar const senha = "seguranç@2025"; e let i = 0 no cabeçalho do laço. Vale lembrar também que strings em JavaScript já possuem a propriedade length e permitem acesso posicional por colchetes de forma direta, funcionando de maneira muito similar aos arrays.

Pensando em cenários de validação de senhas para segurança da informação, como você poderia adaptar essa repetição para checar se a senha contém ao menos um número ou símbolo especial durante a leitura?

Parabéns pela prática no exercício e por compartilhar a sua implementação no fórum. Estamos sempre à disposição para continuarmos essa troca de conhecimentos nos seus estudos.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!

começei a fazer aqui e nem sei mais se consegui fazer o que vc sugeriu. rs mas aqui vai tudo que eu fiz

// apliquei a ideia dos dois ponteiros para poder ser mais rapido. E tambem usei duas funçoes pq a ia do google me sugeriu que era mais bonito assim.
let senhaForte = 'segurAnç@2025';
    function conferindoSenha () {
        let i = 0;
        let f = senhaForte.length-1;
        let temMaiuscula = false;
        let temSpecial = false;

        while (i <= f && (!temMaiuscula || !temSpecial)) {
            if(!temMaiuscula)temMaiuscula = /[A-Z]/.test(senhaForte[i]);
            if(!temSpecial)temSpecial = /[^a-zA-Z0-9]/.test(senhaForte[i]);

            if(!temMaiuscula)temMaiuscula = /[A-Z]/.test(senhaForte[f]);
            if(!temSpecial)temSpecial = /[^a-zA-Z0-9]/.test(senhaForte[f]);

            i++;
            f--;
        }

        if (temMaiuscula && temSpecial) {
            console.log('Senha forte e válida!');
        } else {
            console.log('A senha deve conter ao menos uma letra maiúscula e algum caractere especial');
        }  
    } 
    conferindoSenha();

// simplificando o codigo

let senha = 'SenhaMuitof0rt&';
function verificandoSenha(senha){
    let maiuscula = false;
    let special = false;

    for (let i = 0; i < senha.length/ 2; i++) {
        if(!maiuscula)maiuscula = /[A-Z]/.test(senha[i]);
        if(!special)special = /[^a-zA-Z0-9]/.test(senha[i]);

        if(!maiuscula)maiuscula = /[A-Z]/.test(senha[senha.length-1-i]);
        if(!special)special = /[^a-zA-Z0-9]/.test(senha[senha.length-1-i]);    
        if(maiuscula && special){
            return true;
        }        
    }
    return false;
}

function exibirResultado(senha) {
    const senhaValida = verificandoSenha(senha);

    if (senhaValida) {
        console.log('Sucesso: Sua senha é segura!');
    } else {
        console.log('Erro: A senha deve conter ao menos uma letra maiúscula e um caractere especial.');
    }
}

exibirResultado(senha);

// forma ainda mais resumida
// quando acabei a primeira pedi ajuda para deixar mais resumido ainda e ficou assim.

let senhaN3 = 'SenhaMuitof0rt&OutraVez';
function verificandoSenhaOutraVez(senhaN3){
    let maiusculaOutraVez = false;
    let specialOutraVez = false;

    for (let i = 0; i < senhaN3.length/ 2; i++) {
        maiusculaOutraVez ||= /[A-Z]/.test(senhaN3[i]) ||  /[A-Z]/.test(senhaN3[senhaN3.length-1-i]);
        
        specialOutraVez ||= /[^a-zA-Z0-9]/.test(senhaN3[i]) || /[^a-zA-Z0-9]/.test(senhaN3[senhaN3.length-1-i])    
        if(maiusculaOutraVez && specialOutraVez){
            return true;
        }        
    }
    return false;
}

function exibirResultadoOutraVez(senhaN3) {
    const senhaValida = verificandoSenhaOutraVez(senhaN3);

    if (senhaValida) {
        console.log('teste3 - Sucesso: Sua senha é segura!');
    } else {
        console.log('teste3 - Erro: A senha deve conter ao menos uma letra maiúscula e um caractere especial.');
    }
}

exibirResultadoOutraVez(senhaN3);
solução!

Oi, Tairone.

As três versões funcionam e mostram uma evolução interessante na lógica de dois ponteiros, com a busca convergindo do início e do fim da string ao mesmo tempo. Na última versão, o uso do operador ||= deixou o código mais enxuto sem perder a clareza da condição.

Boa iniciativa em comparar as abordagens e testar as sugestões.

Obrigado por compartilhar.