其他情况从未被触发

时间:2016-05-10 15:39:33

标签: javascript html angularjs regex

这是我部分观点的一部分 -

<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>

这是我的控制器的一部分 -

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";   
    }
});

为什么永远不会触发else条件。我正在提供输入characters@characters.com

3 个答案:

答案 0 :(得分:3)

您将字符串与正则表达式进行比较,这几乎肯定会有所不同。您需要测试正则表达式是否匹配:

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

尽管如此,代码还存在一些其他问题。我已经移动了closest3的声明和初始化,以便正确地在else块中使用它。您还应该删除每个块中的“错误”类以确保正确的行为,否则它将最终应用这两个类。我已使用classList功能执行此操作,但根据您的环境,您可能需要使用different method这样做,因为它是fairly modern property(较早版本的IE将失败) )。

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";   
}

答案 1 :(得分:2)

因为这不是正则表达式的工作方式。

您想使用re.test(str)str.match(re)

答案 2 :(得分:2)

您需要在if条件中使用str.match(regexp)

 if(!self.email.value.match(re))