Contar números y letras de una cadena con javascript

publicado por: Anonymous

De una cadena necesito saber cuántos caracteres hay sin contar espacios o números y mandarlo a imprimir, así como aparte otra función que de esa misma cadena me cuente si hay números y cuantos, igual sin espacios esto es lo que llevo hasta ahora.

Ya me sale cuantos caracteres pero no quiero que me cuente los números, los quiero aparte:

function  cadenaNumerosLetras(){
    var frase = document.getElementById(‘cadena’).value;
    var letterCount = frase.split(/W/).join('').length;
    var contadorLetras = letterCount.toString();
    console.log(letterCount);
    document.getElementById(‘resultado’).value = contadorLetras;
    var numeros = "0123456789";
    if(!isNaN(frase)){
        for(i=0; i<frase.length;i++){
            if(numeros.indexOf(frase.charAt(i),0)!=-1){
                return 1;
                document.getElementById('numeros').innerHTML= frase;
            }
        }
        return 0;          
    }  
}

solución

Para obtener la longitud de una cadena sin los espacios, basta con eliminarlos y obtener la longitud de la cadena resultante:

_x000D_

_x000D_

function lenWithoutSpaces( str ) {
  return str.replace( /s/g, '' ).length;
}

console.log( lenWithoutSpaces( 'Hola y adiós, mundo cruel !' ) );

_x000D_

_x000D_

_x000D_

Para contar los números, te da igual que la cadena tenga o no espacios: un espacio no es un número. Puedes usar Array.prototype.forEach( ), a través de call( ), y pasándole la cadena como argumento.

Y, para la comparación, usa charCodeAt( ), que te devuelve el código ASCII del caracter en esa posición.

_x000D_

_x000D_

function countDigits( str ) {
  var acu = 0;

  Array.prototype.forEach.call( str, function( val ) {
    acu += ( val.charCodeAt( 0 ) > 47 ) && ( val.charCodeAt( 0 ) < 58 ) ? 1 : 0;
  } );

  return acu;
}

console.log( countDigits( 'abcde123fgh' ) );
console.log( countDigits( 'abcdefgh' ) );

_x000D_

_x000D_

_x000D_

Por último, si lo quieres todo en una sola llamada, puedes devolver un objeto:

_x000D_

_x000D_

function examineString( str ) {
  var acu = 0,
      withoutSpaces = str.replace( /s/g, '' ).length;

  Array.prototype.forEach.call( str, function( val ) {
    acu += ( val.charCodeAt( 0 ) > 47 ) && ( val.charCodeAt( 0 ) < 58 ) ? 1 : 0;
  } );

  return {
    withoutSpaces: withoutSpaces,
    digitsCount: acu,
    otherChars: withoutSpaces - acu
  };
}

console.log( examineString( 'Pues vaya, después de 10 o 15 intentos, lo encontré :-)' ) );

_x000D_

_x000D_

_x000D_

EDITO

Para contar los dígitos, también se puede utilizar Array.prototype.reduce( ) … es incluso mas simple:

_x000D_

_x000D_

function countDigits( str ) {
  return Array.prototype.reduce.call( str, function( acu, val ) {
    return ( val.charCodeAt( 0 ) > 47 ) && ( val.charCodeAt( 0 ) < 58 ) ? acu + 1 : acu;
  }, 0 );
}

console.log( countDigits( 'abcde012fgh' ) );
console.log( countDigits( 'abcdefgh' ) );

_x000D_

_x000D_

_x000D_

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *