我有一个用于表单的淘汰模型构建,并且还使用敲除进行验证。一个特定领域给了我一些问题。对文本框的要求是它应该允许任意数量的数字[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,33
,33!33
之类的内容
或任何特殊字符代替小数。我在某处弄错了吗?或者有人知道为什么它会这样表现吗?
答案 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,当使用正则表达式字符串时,你必须逃避反斜杠,我不知道。