我有以下情况:
function ViewModel(){
var self = this;
self.newQty = ko.observable().extend({
pattern: {
message: "Wrong!",
params: new RegExp("^[1-9][0-9]*(\\,\\d{1,2})?|0+\\,\\d{1,2}$")
}
});
self.newQty.subscribe(function() {
if(self.newQty.isValid())
doStuff();
})
}
newQty
字段绑定到input
元素。
如果我在input
框中输入“123”,isValid()
评估为true
,如果我在input
框中输入“asd”{{1}评估为isValid()
。
当我将“123”更改为“123a”时,问题就会出现。 false
仍然评估为真。
我的问题是:有没有办法手动强制重新评估字段isValid()
?我发现了一些帖子超级调用newQty
但我在使用时遇到valueHasMutated()
错误。
我使用Knockout 2.3.0和最新版本的Knockout验证插件。
谢谢!
答案 0 :(得分:1)
问题在于你没有逃避交替(|
)。如果你添加括号,它应该工作:
params: new RegExp("^([1-9][0-9]*(\\,\\d{1,2})?|0+\\,\\d{1,2})$")
您可以在浏览器控制台中测试它:
'1234a'.test(/^[1-9][0-9]*(\\,\\d{1,2})?|0+\\,\\d{1,2}$/) //returns true
'1234a'.test(/^([1-9][0-9]*(\\,\\d{1,2})?|0+\\,\\d{1,2})$/) //returns false