使用敲除的多个“模式”验证扩展器

Sim*_*Sim 2 javascript knockout.js knockout-validation

如果我像这样扩展可观察的淘汰赛

var x = ko.observable().
extend({ 
     pattern : { 
         params: someRegex,
         message: "An error"
    }
})
.extend({ 
     pattern : { 
         params: someMoreRegex,
         message: "Another error"
    }
})
Run Code Online (Sandbox Code Playgroud)

这是可观察到的淘汰赛的有效扩展名(即多个模式扩展名)吗?

第二个模式的正则表达式根本没有得到验证。在某些情况下,确实会触发它,但会显示第一个模式错误消息。我最近将表格1.0.2升级到了2.0.3,此功能已经失效,但似乎无法确定为什么它不再起作用。

use*_*291 6

这个(公认的,很老的)Github问题中,我得出结论,验证库不支持此功能...

一个快速的解决方法是创建validatorpattern扩展名借用该方法的匿名自定义规则。

一个示例(没有意义,但显示了如何将两个模式与自己的错误结合在一起):

this.name = ko.observable("").extend({
  validation: [{
      validator: ko.validation.rules['pattern'].validator,
      message: "Must be lowercase",
      params: /^[a-z]+$/
    }, {
      validator: ko.validation.rules['pattern'].validator,
      message: "Must be uppercase",
      params: /^[A-Z]+$/
    }
  ]
});
Run Code Online (Sandbox Code Playgroud)

您可以通过创建一个返回所需对象的工厂方法来清理这段代码,或者创建一个使用正则表达式数组和错误消息数组的自定义规则。