挖空验证 - isValid() 在值更改后始终为真

Knockout validation - isValid() always true after value change

本文关键字:验证 isValid      更新时间:2024-05-09

我有以下情况:

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",则isValid()的计算结果为 false

当我将"123"更改为"123a"时,问题就会显现出来。 isValid()的计算结果仍为 true。

我的问题是:有没有办法手动重新评估现场newQty?我找到了一些最讨厌打电话valueHasMutated()的帖子,但是当我使用它时Maximum call stack size exceeded我得到了错误。

我使用挖空 2.3.0 和最新版本的挖空验证插件。

谢谢!

问题是你没有逃脱你的交替(|(。 如果添加括号,它应该可以工作:

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