Foros del Web » Programando para Internet » Javascript »

Contar caracteres menos los espacios?

Estas en el tema de Contar caracteres menos los espacios? en el foro de Javascript en Foros del Web. Hola, que tal? En este momento tengo un codigo que permite contar el numero de caracteres de una caja de texto y limita al usuario ...
  #1 (permalink)  
Antiguo 24/03/2004, 07:33
netoec
Invitado
 
Mensajes: n/a
Puntos:
De acuerdo Contar caracteres menos los espacios?

Hola, que tal? En este momento tengo un codigo que permite contar el numero de caracteres de una caja de texto y limita al usuario de tal forma que solamente pueda escribir un numero determinado de caracteres, ahora bien mi problema es que necesito modificar de alguna manera el codigo para que no sea contado los espacios entre cada palabra, es decir si el usuario ingresa "hola amigo" deberia contar solamente 9 caracteres y pasar al espacio por alto, hay alguna manera de hacer eso?? el codigo que dispongo es este:

Código PHP:

<html>

<head>
<script language="JavaScript" type="text/javascript"> 
function ExtensionMensaje(Formulario){
        TotalMensaje = Formulario.mensaje.value.length
        if (TotalMensaje > 133 ) {    
            Formulario.mensaje.value = Formulario.mensaje.value.substring(0,133)
            CRestantes = 0
        }
        else {
            CRestantes = 133 - TotalMensaje
        }
        Formulario.CRestantes.value = CRestantes
    }
</script>
</head>

<body>

<form id="mensaje" name="mensaje" action="sms2.php" method="post" align="center">
<input type="hidden" name="direccion_mail" value="<? echo $para ?>">
<input type="hidden" name="empresa" value="<? echo $operadora ?>">
  <div align="center"><center><table cellSpacing="0" cellPadding="0" width="500" border="0">
    <tr>
      <td><div align="center"><center><p><textarea id="mensaje"
      onkeydown="ExtensionMensaje(form)" onblur="ExtensionMensaje(form)"
      onkeyup="ExtensionMensaje(form)" onfocus="ExtensionMensaje(form)" name="mensaje"
      rows="5" wrap="hard" cols="30"></textarea></td>
    </tr>
    <tr align="center">
      <td><div align="center"><center><p><input id="CRestantes" size="3" value="150"
      name="CRestantes"><font face="verdana" color="#ffcc33" size="1"> </font><strong><font
      face="Verdana" size="1" color="#000000">CARACTERES RESTANTES</font></strong><br>
  <input type="submit" value="Enviar"></td>
    </tr>
  </table>
  </center></div>
</form>

</center></div>
</body>
</html>
Tiene algunas cosas de php, pero no le presten atencion ya que en mi problema no tienen nada que ver.

Ojala me puedan ayudar

Saludos
  #2 (permalink)  
Antiguo 24/03/2004, 09:21
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola netoec:

Se me ocurre una funcioncilla fácil usando split, pero voy a improvisar una con charAt...

function nEspacios(dato) {
var contador = 0;
for (var i == 0; i < dato.length; i ++)
contador += (dato.charAt(i) == " ") ? 1:0;
return contador;
}

Si esto funciona bien (no lo probé aún )... tendrías que hacer un pequeño arreglo...

Código PHP:
function ExtensionMensaje(Formulario){
        
TotalMensaje Formulario.mensaje.value.length nEspacios(Formulario.mensaje.value);
        if (
TotalMensaje 133 ) {    
            
Formulario.mensaje.value Formulario.mensaje.value.substring(0,133)
            
CRestantes 0
        
}
        else {
            
CRestantes 133 TotalMensaje
        
}
        
Formulario.CRestantes.value CRestantes
    

He notado que usas la función en muchos eventos, y me parece que con onkeyup sería suficiente.

Saludos
  #3 (permalink)  
Antiguo 24/03/2004, 10:19
Avatar de KarlanKas
Moderador extraterrestre
 
Fecha de Ingreso: diciembre-2001
Ubicación: Madrid
Mensajes: 6.987
Antigüedad: 22 años, 4 meses
Puntos: 61
Prueba con esta... lo que pasa es que deja el último caracter puesto... y no debería. En la variable maximo indicas cual es el número máximo de caracteres.

Código PHP:
<html>
<
head>
    <
title>Untitled</title>
    <
script>
    
maximo=5

    
function contar(continente){
        
letras=0;
        
contenido=continente.value;
        
        for(
a=0;a<contenido.length+1;a++){
             if(
letras>maximo){return false}
            if(
contenido.charAt(a)!=" "){letras+=1;}
         
continente.value=contenido.substring(0,a);}
    }
    
</script>
</head>

<body>

<textarea  onkeydown="contar(this)" cols="20" rows="20" name="texto"></textarea>

</body>
</html> 
__________________
Cómo escribir

No hay pregunta tonta, sino tonto que quiere seguir en la ignorancia.
  #4 (permalink)  
Antiguo 24/03/2004, 10:45
Avatar de KarlanKas
Moderador extraterrestre
 
Fecha de Ingreso: diciembre-2001
Ubicación: Madrid
Mensajes: 6.987
Antigüedad: 22 años, 4 meses
Puntos: 61
hombre caricatos!!
__________________
Cómo escribir

No hay pregunta tonta, sino tonto que quiere seguir en la ignorancia.
  #5 (permalink)  
Antiguo 24/03/2004, 10:47
Avatar de KarlanKas
Moderador extraterrestre
 
Fecha de Ingreso: diciembre-2001
Ubicación: Madrid
Mensajes: 6.987
Antigüedad: 22 años, 4 meses
Puntos: 61
Esta funciona aunque creo que sólo en IE...
Código PHP:
<html>
<
head>
    <
title>Untitled</title>
    <
script>
    
maximo=5
letras
=0
    
function contar(continente){
    
document.getElementById("p3p3").innerHTML=letras;
    
contenido=continente.value;
    if(
letras>=maximo && contenido.length>total && contenido.lastIndexOf(" ")!=contenido.length-1){
    return 
false}
    
total=contenido.length
        letras
=0;
        
        
        for(
a=0;a<contenido.length+1;a++){
             
            if(
contenido.charAt(a)!=" "){letras+=1;}
         
continente.value=contenido.substring(0,a);}
    }
    
</script>
</head>

<body>

<textarea  onkeypress="return contar(this)" cols="20" rows="20" name="texto"></textarea>
<div id=p3p3></div>
</body>
</html> 






Aunque me gusta mucho más la solución de caricatos!
__________________
Cómo escribir

No hay pregunta tonta, sino tonto que quiere seguir en la ignorancia.

Última edición por KarlanKas; 24/03/2004 a las 10:49
  #6 (permalink)  
Antiguo 24/03/2004, 21:31
netoec
Invitado
 
Mensajes: n/a
Puntos:
Encontre un error!

Hola muchas gracias por su ayuda, trate de implementar la solucion de caricatos, antes le corregi un doble igual en el for, al principio parecia funcionar pero luego encontre un error, este error sucede cuando ingresar por ejemplo el texto: en un principio pareceria que el codigo funciona ya que los caracteres en blanco no son contados pero cuando sigues escribiendo ves q no es asi teoricamente ese texto deberia poder ser ingresado hasta la "a" de asi y cuando ingreses la "s" deberia borrala ha esta, asi trabajaba antes, pero cuando ingresas la "s" se borrar hasta mucho mas antes y quedan disponibles nuevamente el espacio de los caracteres en blanco, ahora hay manera de que cuando llegue a la ultima "s" se borre unicamente esta y no has mucho antes??? (lo q esta haciendo este momento es contar los caracteres en blanco y tambien borrarlos)

intente subir la pagina pero el servidor se cayo asi que les pongo el codigo que tengo ahora:

Código PHP:
<html>

<head>

<script language="JavaScript" type="text/javascript"> 

function nEspacios(dato) {
var contador = 0;
for (var i = 0; i < dato.length; i ++) 
contador += (dato.charAt(i) == " ") ? 1:0

return contador;
}


function ExtensionMensaje(Formulario){
        TotalMensaje = Formulario.mensaje.value.length - nEspacios(Formulario.mensaje.value);
        if (TotalMensaje > 116) {    
            Formulario.mensaje.value = Formulario.mensaje.value.substring(0,116)
            CRestantes = 0
        }
        else {
            CRestantes = 116 - TotalMensaje
        }
        Formulario.CRestantes.value = CRestantes
    }
</script>
</head>

<body>

<form id="mensaje" name="mensaje" action="sms2.php" method="post" align="center">
<input type="hidden" name="direccion_mail" value="<? echo $para ?>">
<input type="hidden" name="empresa" value="<? echo $operadora ?>">
  <div align="center"><center><table cellSpacing="0" cellPadding="0" width="500" border="0">
    <tr>
      <td><div align="center"><center><p><textarea id="mensaje"
      onkeydown="ExtensionMensaje(form)" onblur="ExtensionMensaje(form)"
      onkeyup="ExtensionMensaje(form)" onfocus="ExtensionMensaje(form)" name="mensaje"
      rows="5" wrap="hard" cols="30"></textarea></td>
    </tr>
    <tr align="center">
      <td><div align="center"><center><p><input id="CRestantes" size="3" value="150"
      name="CRestantes"><font face="verdana" color="#ffcc33" size="1"> </font><strong><font
      face="Verdana" size="1" color="#000000">CARACTERES RESTANTES</font></strong><br>
  <input type="submit" value="Enviar"></td>
    </tr>
  </table>
  </center></div>
</form>

</center></div>
</body>
</html>
Ojala se pueda solucionar este problema y muchas gracias otra vez por su ayuda!

Última edición por netoec; 24/03/2004 a las 21:37
  #7 (permalink)  
Antiguo 25/03/2004, 02:54
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola otra vez:

Parece que el contador de espacios está bien, tal vez el fallo esté en la función ExtensionMensaje...

Hice un arreglillo que parece que mejora su funcionamiento, pero no sé si falta algún otro ajuste.

function ExtensionMensaje(Formulario){
TotalEspacios = nEspacios(Formulario.mensaje.value);
// Formulario.Espacios.value = TotalEspacios;
TotalMensaje = Formulario.mensaje.value.length + TotalEspacios;
if ((TotalMensaje - TotalEspacios) > 150) {
Formulario.mensaje.value = Formulario.mensaje.value.substring(0,150)
CRestantes = 0;
}
else {
CRestantes = 150 - TotalMensaje + TotalEspacios;
}
Formulario.CRestantes.value = CRestantes
}

Saludos
  #8 (permalink)  
Antiguo 25/03/2004, 07:18
netoec
Invitado
 
Mensajes: n/a
Puntos:
Trabaja como al inicio

Lo estube probando pero lamentablemente no funciona, ahora no cuenta los espacios en blanco, o sea los cuenta como un caracter mas, dejandolo como un principio, hay manera de que fucione??
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:30.