使用敲除的多个 "pattern" 验证扩展器

Multiple "pattern" validation extenders using knockout

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

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

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

第二个模式的正则表达式根本没有经过验证。在某些情况下,它确实会被触发,但会显示第一个模式错误消息。我最近将表格 1.0.2 升级到 2.0.3 敲除验证,此后已损坏但似乎无法说明为什么它不再有效。

this(诚然,很老)Github问题,我得出结论,验证库不支持...

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

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

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

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