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

时间:2016-06-27 08:37:01

标签: javascript knockout.js knockout-validation

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

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

这是挖掘可观察的有效扩展(即多个模式扩展)吗?

第二种模式的正则表达式根本没有被验证。在某些情况下,它会被触发但显示第一个模式错误消息。我最近已将表格1.0.2升级到2.0.3淘汰赛验证,这已经破了但似乎无法理解为什么这不再有效。

1 个答案:

答案 0 :(得分:4)

this(非常古老)Github问题,我得出结论,验证库不支持...

快速解决方法可能是创建匿名自定义规则,借用validator扩展名中的pattern方法。

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

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]+$/
    }
  ]
});

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