4
respostas

Erro no qtdePalavras

Existe um bug no código quando o cálculo da quantidade de palavras é feita da seguinte forma:

var contadorPalavras = campoDigitacao.val().trim().split(/\S+/).length -1

A subtração elimina uma palavra na contagem.

O correto é verificar se o campo estiver vazio zerar o contador de palavras.

Outro erro que encontrei foi na expressão regular. Ao utilizar o "S" maiúsculo, a contagem dos caracteres não acontece.

O correto é utilizar o "s" minúsculo.

4 respostas

Oi, Daniel, tudo bem?

você tentou dessa forma?

var contadorPalavras = campoDigitacao.split(/\S+/).length - 1;

E sobre a expressão regular, a forma está correta, pois se você usar * \s * ele vai contar os espaço em branco, ou seja, os espaços, já o * \S *, não. esse contará os não-brancos.

\s     branco     espaço, quebra de linha, tabs etc.; o mesmo que [ \t\n\r\f\v]
\S     não-branco     o mesmo que [^ \t\n\r\f\v]

Espeto ter te ajudado! :}}

Oi Lais,

Para o contador de palavras eu testei das duas formas, e a que eu coloquei no comentário está correta.

Já o contador de caracteres está dando erro das duas formas.

Irei verificar meu código depois com mais calma.

Obrigado pela participação

Daniel, se quiser posta aqui ou pelo GitHub o teu código para verificar o contador de caracteres.

Lais, descobri o erro

Na expressão regular faltou o 'g' de global para varrer em toda a string os espaços vazios.

Sem o 'g' a expressão só encontra o primeiro espaço que tiver na string.

Verifiquei que o 'S' (maiúsculo) considera um caracter a mais quando é digitado o primeiro caracter no campo, seja espaço ou outro caracter.

O 's' é o recomendado a usar seguido do 'g' para buscar todos os espaços em branco. Neste caso é mais coerente com o que se pede não havendo a necessidade de subtrair por '-1'.

Essa subtração que o professor utilizou foi para tratar o caso do usuário digitar espaço antes da frase e não considerar como uma palavra digitada.

Segue o código

campoDigitacao.on("input", function() {

    // verifica primeiro se o primeiro caracter foi espaço para não contar com uma palavra digitada    
    var contadorPalavras = (campoDigitacao.val().trim().length == 0) ? 0 : campoDigitacao.val().trim().split(/\s+/).length; // É recomendavel uma REGEX para tratar os espaços
    $("#contador-palavras").text(contadorPalavras);

    // expressão regular para varrer em toda a string os espaços vazios e não contabilizar = é necessário o 'g' no final para que a expressão global e não somente no primeiro espaço que tiver na frase.
    conteudoSemEspaco = campoDigitacao.val().replace(/\s+/g,'');

    var qtdCaracteres = conteudoSemEspaco.length;
    $('#contador-caracteres').text(qtdCaracteres);
});