注意:这不是关于测试有效电子邮件格式的问题,而是如何以正确的方式测试false
。我试图避免(另一个)正则表达式辩论: - )
我使用knockout来显示或隐藏错误,具体取决于输入值是否为有效的电子邮件。这是我的代码:
<input type="text" id='email' data-bind="textInput:email" />
<p data-bind="visible: /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}$/i.test(email()) == false"> Email must be valid.</p>
var signup = {
email:ko.observable("")
};
ko.applyBindings(signup);
我的问题是,测试正则表达式是== false
是否是浏览器安全的,或者不同的浏览器是否会以不同方式对待它。我正在测试铬,它似乎工作正常。如果这不是正确的方法,有没有办法用正则表达式本身测试真的倒数?
答案 0 :(得分:2)
您可以使用!!regex
将其转换为bool
。但是,在if
声明中,无论如何都会这样做(取决于您要检查的内容 - 它适用于true
和false
)。
所以回答你的问题:是的,你的方法是浏览器安全的/跨浏览器兼容的。
答案 1 :(得分:0)
它是&#34;正确&#34;?这取决于你的意思&#34;正确&#34;。是的,它会起作用,但请查看例如mdn,强调我的:
test()
方法执行搜索正则表达式与指定字符串之间的匹配。 返回true
或false
。
所以不需要将它与布尔值进行比较,也不需要对!!
成语进行比较 - 尽管两者都不会损害功能性。
有一点需要注意的是,保证这个额外的答案IMO,您可能不应该将该逻辑放在视图中,而是使用computed
代替将其置于视图中而不是模型:
<input type="text" id="email" data-bind="textInput: email" />
<p data-bind="visible: email.isValid">Email must be valid.</p>
var signup = {
email: ko.observable("")
};
signup.email.isValid = ko.computed(function() {
return /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}$/i.test(signup.email());
});
ko.applyBindings(signup);
这段代码可以很好地跨浏览器工作,很可能包括IE版本,而不是我想要的水平。如果你坚持要添加一些代码明智的提示,isValid
返回一个布尔值(除了它的名字和你应该写的单元测试),我更喜欢这里提到的!!
成语。与问题中的false
进行比较的其他答案。