KnockoutJS验证 - 模型变量regex的行为不符合预期

时间:2015-11-18 02:21:48

标签: javascript regex knockout.js

我有一个用于表单的淘汰模型构建,并且还使用敲除进行验证。一个特定领域给了我一些问题。对文本框的要求是它应该允许任意数量的数字[0-9],并且可选地允许最多2个小数位。我的变量如下所示

var debtIncomeRatio = ko.observable().extend({
    required: {
        onlyIf: function () {
            return (isQualified() == "Qualified" && (!nonReportable() && !isFinanced()));
        },
        message: "* Required"
    },
    pattern: {
        message: '* Number, no more than 2 decimal places',
        params: '^[0-9]+(\.[0-9]{1,2})?'
    }
});

我上面的正则表达式^[0-9]+(\.[0-9]{1,2})?应该适用于我读过的每个论坛和主题。我还在https://regex101.com/等网站上对其进行了测试,该网站会验证它是否可行。但实际上,在我的表单上输入数据时,它允许33,3333!33之类的内容 或任何特殊字符代替小数。我在某处弄错了吗?或者有人知道为什么它会这样表现吗?

2 个答案:

答案 0 :(得分:1)

尝试使用正则表达式文字而不是字符串。

pattern: {
    message: '* Number, no more than 2 decimal places',
    params: /^[0-9]+(\.[0-9]{1,2})?/
}

答案 1 :(得分:1)

我不知道为什么,但我也无法使用正则表达式文字,但是在使用正则表达式字符串时我发现了错误。参考我在S.O.上找到的这个答案。 Knockout-Validation Using Regular Expression to Validate a Phone Number,当使用正则表达式字符串时,你必须逃避反斜杠,我不知道。