knockout.js 如何配置敲除验证的号码本地化?

brccelvz  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(158)

我正在使用knockout.jsknockout validation开发Web应用程序。
我有一个这样的视图模型:

var viewModel = {
    prop1 : ko.observable().extend({number:true}),
    prop2 : ko.observable().extend({number:true}),
    prop3 : ko.observable().extend({number:true}),
    save : function () {
        var vmValidatable = ko.validatedObservable(viewModel);
        if (!vmValidatable.isValid())
            return false;
    }
}

在前端,如果我试图保存一个带有小数点分隔符逗号的数字,而不是一个点,我的save函数返回false。

  • 例如:如果prop1具有“1.2”值,则保存函数正确地工作,否则如果prop1具有“1,2”值,则save函数返回假。

你能帮帮我吗?
多谢你了

yeotifhr

yeotifhr1#

下面是您正在使用的number扩展器的源代码:

// https://github.com/Knockout-Contrib/Knockout-Validation/blob/master/src/rules.js#L221
ko.validation.rules['number'] = {
  validator: function (value, validate) {
    if (!validate) { return true; }
    return ko.validation.utils.isEmptyVal(value) || 
      (validate && /^-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(value));
  },
  message: 'Please enter a number.'
};

我不是正则表达式Maven,但它看起来像“”,只有当它们分隔3位数字时才支持分隔数字。即:您不能使用逗号来标记小数点。

console.log(/^-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test("100,000"))
console.log(/^-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test("100,000.00"))
console.log(/^-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test("1,2"))
console.log(/^-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test("1,200"))

如果输入的值被测试为与模式不匹配,你可以添加另一个扩展器来删除,字符。
第一个

相关问题