Javascript测试正则表达式为falsy值

时间:2016-04-07 15:28:07

标签: 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"> Email must be valid.</p>

var signup = {        
    email:ko.observable("")
};
ko.applyBindings(signup);

我的问题是,测试正则表达式是== false是否是浏览器安全的,或者不同的浏览器是否会以不同方式对待它。我正在测试铬,它似乎工作正常。如果这不是正确的方法,有没有办法用正则表达式本身测试真的倒数?

2 个答案:

答案 0 :(得分:2)

您可以使用!!regex将其转换为bool。但是,在if声明中,无论如何都会这样做(取决于您要检查的内容 - 它适用于truefalse)。

所以回答你的问题:是的,你的方法是浏览器安全的/跨浏览器兼容的。

答案 1 :(得分:0)

它是&#34;正确&#34;?这取决于你的意思&#34;正确&#34;。是的,它会起作用,但请查看例如mdn,强调我的:

  

test()方法执行搜索正则表达式与指定字符串之间的匹配。 返回truefalse

所以不需要将它与布尔值进行比较,也不需要对!!成语进行比较 - 尽管两者都不会损害功能性。

有一点需要注意的是,保证这个额外的答案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进行比较的其他答案。