Esta es una parte de mi visión parcial:

<div class="form-group row">
    <label for="email" class="col-sm-2 form-control-label">Email address</label>
    <div class="col-sm-9">
        <input type="email" class="form-control" id="email" name="email" pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,3}$" placeholder="Email Address" required/>
    </div>
</div>

Esto es parte de mi controlador

var re = /[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,3}$/;

self.email = document.getElementById("email");

angular.element(self.email).on("input", function () {
    console.log("Inside event");
    if(self.email.value != re) {
        var closest3 = self.email.closest('div');
        closest3.className += " has-error";
    }

    else {
        closest3.className += " has-success";   
    }
});

¿Por qué nunca se activa la condición else? Estoy dando la entrada characters@characters.com

2
Aaron 10 may. 2016 a las 18:39

3 respuestas

La mejor respuesta

Estás comparando la cadena con la expresión regular, que casi siempre será diferente. En su lugar, debe probar que la expresión regular coincide:

if(!re.test(self.email.value)) {

Sin embargo, hay algunos otros problemas con el código tal como se presenta. He movido la declaración y la inicialización de closest3 para que esté disponible en el bloque else correctamente. También debe eliminar la clase "incorrecta" en cada bloque para garantizar un comportamiento correcto, de lo contrario terminará aplicando ambas clases. He utilizado la funcionalidad classList para hacerlo, pero dependiendo de su entorno, es posible que necesite usar un método diferente de hacerlo, ya que es una propiedad bastante moderna (las versiones anteriores de IE fallarán).

var closest3 = self.email.closest('div');
if(!re.test(self.email.value)) {
    closest3.classList.remove("has-success");
    closest3.className += " has-error";
} else {
    closest3.classList.remove("has-error");
    closest3.className += " has-success";   
}
3
Community 23 may. 2017 a las 11:59

Porque no es así como funcionan las expresiones regulares.

Desea utilizar re.test(str) o str.match(re) .

2
epascarello 10 may. 2016 a las 15:41

Debe usar str.match(regexp) en su condición if:

 if(!self.email.value.match(re))
2
R3tep 10 may. 2016 a las 15:42