Ver Mensaje Individual
  #2 (permalink)  
Antiguo 23/12/2007, 10:18
Avatar de derkenuke
derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 21 años, 2 meses
Puntos: 45
Re: formulario contraseña

Hola dvd1975:

Como dices que estás empezando con javascript lo voy a plantear despacio para que no te pierdas. Tienes 3 condiciones a cumplir, luego en tu función para validar deberían distinguirse bien en un vistazo esas 3 condiciones:
Código PHP:
if( condicion1 ) {
  
//error1
}
else if( 
condicion2 ) {
  
//error2
}
else if( 
condicion3 ) {
  
//error3
}
else {
  
//sin errores

También tienes que tener claro que tu función debe retornar siempre true o false, ya que en tu formulario escribirás onsubmit="return comprobar()", y si se envía o no dependerá de ese true o false.

Una vez buscada esta estructura, tenemos que empezar a buscar condición1, 2 y 3. Vamos una por una:
  • La primera ya la tienes, es fácil: campo1.value!==campo2.value
  • La segunda tampoco es complicada como has visto: campo1.value==="" || campo2.value===""
  • Para la tercera lo tenemos más complicado, porque como no sabemos cuántos espacios en blanco se van a introducir, no podemos hacer una comparación directa. Aquí hay muchas soluciones, te voy a proponer varias:
    • Contar cuántos espacios en blanco tiene la contraseña. Si ese número es igual a la longitud del value significa que la contraseña son sólo espacios en blanco (creo que has intentado hacer eso).
    • Eliminar los espacios en blanco de la contraseña. Si nos quedamos con una cadena vacía es que eran sólo espacios.
    • Partir la cadena según los espacios (split()) y contar cuantas piezas tenemos. Si tenemos tantas piezas como caracteres entonces son todas espacios.
    Habrán bastantes más... pero no quiero abrumarte con posibilidades. Tampoco quiero meterme con expresiones regulares si dices que estás empezando... Vamos a seguir tu método de contar espacios.
    Para ello podemos ir caracter por caracter mirando si equivale a un espacio, y entonces aumentar la variable contador. Para un campo llamado campo se haría así:
    Código PHP:
    for(var i=0l=campo.value.lengthi<li++) {
        if( 
    campo.value.charAt(i)===" " )
            
    contador++;

    Partiendo la cadena por espacios resulta más directo:
    Código PHP:
    var contador campo.value.split(" ").length-1
    Así que me voy a quedar con esta última forma.


Bueno, teniendo ya las tres condiciones, la construcción del script es algo trivial. Te paso el ejemplo completo (un poco modificado).

Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
>
<
html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es">
<
head>
    <
meta http-equiv="Content-type" content="text/html;charset=iso-8859-1" />
    <
title>Ejercicio</title>
    <
script type="text/javascript">
    <!--

    
// Validador de un formulario
    
function comprobar(fr) {
        var 
pass1 fr.contrasena.value;                    // contraseña
        
var pass2 fr.nueva.value;                            // repetición de la contraseña
        
var espacios1 pass1.split(" ").length-1;            // número de espacios de la contraseña
        
var espacios2 pass2.split(" ").length-1;            // número de espacios de la repetición
        
if( pass1 !== pass2 ) {                                                // si son diferentes
            
alert("las contraseñas son diferentes");
            return 
false;
        }
        else if( 
pass1==="" || pass2==="" ) {                                // si alguna está vacía
            
alert("Una o las dos contraseñas están vacías");
            return 
false;
        }
        else if( 
espacios1===pass1.length || espacios2===pass2.length ) {    // si alguna es sólo espacios en blanco
            
alert("Una o las dos contraseñas están formadas únicamente por espacios en blanco");
            return 
false;
        }
        else {                                                                
// ningún error
            
alert("Todo va bien");    
            return 
true;
        }
    }


    
// -->
    
</script>
</head>

<body>


    <form name="formulario" onsubmit="return comprobar(this)" action="">
        <p>Introduce una contraseña</p>
        <label for="pass">Contraseña</label> <input type="password" id="pass" size="20" name="contrasena"/><br/>
        <label for="repass">Nueva contraseña</label> <input type="password" id="repass" size="20" name="nueva" /><br/>
        <input type="submit" name="En" value="Enviar" />
    </form>


</body>
</html> 

Si tienes alguna duda no dudes en postearla.

Un saludo
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.