4
respostas

[Dúvida] PROJETO E-TICKET

Gostaria de saber se consigo alguma maneira de quando o usuário digitasse o sinal de "+" antes de colocar um número no campo quantidade, o código retornasse um alert com erro pois foi usado caractere especial. Consegui retirar todos os caracteres especiais, menos o sinal de "+", quando colocado antes de qlqr número, exemplo "+3", ele compra 3 ingressos normalmente.

if(quantidade === ' ' || !/^\d+$/.test(quantidade)){

 alert('Por favor, insira o número de ingressos que deseja comprar!\n\nAtenção, insira apenas números para a quantidade de ingressos.\nNão é permitido o uso de quaisquer caractere especial neste campo!');
    return;

}

4 respostas

Olá, João! Entendi sua dúvida e acredito que posso te ajudar.

O problema que você está enfrentando é que o JavaScript interpreta o sinal de "+" antes de um número como uma indicação para converter a string em um número, e não como um caractere especial. Isso acontece mesmo quando você usa a expressão regular /^\d+$/, que deveria aceitar apenas dígitos.

Uma alternativa para resolver isso é adicionar uma verificação adicional no seu código para verificar se o primeiro caractere da string é um "+". Aqui está um exemplo de como você poderia fazer isso:

if(quantidade == ' ' || quantidade[0] == '+' || !/^\d+$/.test(quantidade)){
    alert('Por favor, insira o número de ingressos que deseja comprar!\n\nAtenção, insira apenas números para a quantidade de ingressos.\nNão é permitido o uso de quaisquer caractere especial neste campo!');
    return;
}

Neste exemplo, quantidade[0] == '+' verifica se o primeiro caractere da string é um "+". Se for, a função retorna e exibe o alerta.

Espero ter ajudado e bons estudos!

Com essa solução, o problema é solucionado parcialmente, pois, quando o sinal "+" é digitado isolado no campo quantidade, não acompanhado de um número, o alerta é exibido. Porém quando ele é adicionado a frente de um número, o programa ocorre normalmente.

Entendi. Pode alterar o if então para tratar separado:

if (quantidade.trim() === '' || !/^\d+$/.test(quantidade) || /[+-]/.test(quantidade))

ainda não consegui resolve, quaisquer restrição que eu coloque por mais que esteja correta a afirmação, o código interpreta como comum, creio que seja algo intrínseco a alguma biblioteca ou a criação do campo no HTML. segue o código completo

    function comprar(){

    let tipoIngresso = document.getElementById('tipo-ingresso').value;
    let quantidadeString = document.getElementById('qtd').value;

    let ingressosString = document.getElementById(('qtd-') + tipoIngresso.toLowerCase());
    let ingressosNumero = parseInt(ingressosString.textContent);

    if(quantidadeString.trim() === '' || !/^\d+$/.test(quantidadeString) || /[+-]/.test(quantidadeString)){
        alert('Por favor, insira o número de ingressos que deseja comprar!\n\nAtenção, insira apenas números para a quantidade de ingressos.\nNão é permitido o uso de quaisquer caractere especial neste campo!');
        return;
    }

    let quantidade = parseInt(quantidadeString);
    
    if(ingressosNumero >= quantidade){
        let atualizacaoIngressos = ingressosNumero - quantidade;
        ingressosString.textContent = atualizacaoIngressos;
    } else {
        let palavraIngresso = quantidade > 1 ? 'ingressos' : 'ingresso'; 
        alert(`Infelizmente a quantidade de: ${quantidade} ${palavraIngresso} não está disponível no momento\nExistem atualmente ${ingressosNumero} ${palavraIngresso} liberados para compra. `);
    }

}