Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
falsy值的Javascript测试正则表达式_Javascript_Regex_Knockout.js - Fatal编程技术网

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
相比过多