这是我部分观点的一部分 -
<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
答案 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)
因为这不是正则表达式的工作方式。
答案 2 :(得分:2)
您需要在if条件中使用str.match(regexp)
:
if(!self.email.value.match(re))