falsy值的Javascript测试正则表达式
注意:这不是关于测试有效电子邮件格式的问题,而是如何以正确的方式测试falsy值的Javascript测试正则表达式,javascript,regex,knockout.js,Javascript,Regex,Knockout.js,注意:这不是关于测试有效电子邮件格式的问题,而是如何以正确的方式测试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
。我试图避免(另一场)正则表达式辩论:-)
我使用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);
电子邮件必须有效
var注册={
电子邮件:ko.observable(“”)
};
ko.应用绑定(注册);
我的问题是,测试正则表达式是否为
==false
是否是浏览器安全的,或者不同的浏览器是否对此有不同的处理方式。我正在测试chrome,它似乎工作得很好。如果这不是正确的方法,那么有没有办法用正则表达式本身测试true的倒数?您可以使用!!regex
,将其转换为bool
。但是,在if
语句中,无论如何都会执行此操作(取决于您要检查的内容-对于true
和false
,它都会执行)
因此,要回答您的问题:是的,您的方法是浏览器安全/跨浏览器兼容的。是否“正确”?这取决于你所说的“正确”是什么意思。是的,它会起作用,但看看例如,emphasis mine:
test()
方法执行搜索正则表达式和指定字符串之间的匹配返回true
或false
因此,无需将其与布尔值进行比较,也无需使用代码>惯用语-虽然两者都不会损害功能
但是需要注意的一点是,为了保证这个额外的答案,您可能不应该将该逻辑放在视图中,而应该使用computed
将其放在视图模型中:
电子邮件必须有效
var signup={
电子邮件:ko.observable(“”)
};
signup.email.isValid=ko.computed(函数(){
return/^[A-Z0-9.Z0%+-]+@[A-Z0-9.-]+\[A-Z]{2,}$/i.test(signup.email());
});
ko.应用绑定(注册);
这段代码在跨浏览器时可以很好地工作,很可能包括IE版本到我不愿意考虑的级别。如果您坚持添加一些代码提示,isValid
返回一个布尔值(除了它的名称和您可能应该编写的单元测试之外),我更喜欢另一个答案中提到的“代码>习语”与你在问题中所做的false
相比过多