Meteor 如何使用check()或Match.test()验证数字?
我试图在一个方法中进行验证,该方法设置为在基本库存中创建产品,但表示货币ie、99或99.95的数字通过check()和Match.test()运行,并抛出匹配失败或返回false:Meteor 如何使用check()或Match.test()验证数字?,meteor,Meteor,我试图在一个方法中进行验证,该方法设置为在基本库存中创建产品,但表示货币ie、99或99.95的数字通过check()和Match.test()运行,并抛出匹配失败或返回false: check(_data, { name: String, sku: String, retail: Number, cost: Number, qty: Number }); 当字段值作为字符串直接从表单字段传递时,这种不匹配是有意义的。问题是,如果我在parseInt()
check(_data, {
name: String,
sku: String,
retail: Number,
cost: Number,
qty: Number
});
当字段值作为字符串直接从表单字段传递时,这种不匹配是有意义的。问题是,如果我在parseInt()或parseFloat()中输入字段值,然后输入一个类似“asdf”的字符串,那么这两个函数将丢弃该值,使其看起来好像没有输入任何内容
<强>我如何处理Int和浮动验证,包括告诉用户他们输入了无效的字符串而不是一个数字?< /强>
我在客户端事件中使用的一个小工作来清理数据,但我认为黑客:parseNumber = function(n) {
if(!isNaN(parseFloat(n)) && isFinite(n)) {
return parseFloat(n);
} else {
return n
}
}
这至少让check()和Match.test()通过传递有效数字或无效字符串来工作。否则,他们无法优雅地处理NaN。我能找到的处理此问题的最佳方法是使用
注意处理浮动的
decimal:true
。将简单模式与相结合,就可以对数据库插入和更新进行自动验证处理。可能重复感谢,这很有用。问题是check()和Match.test()接受NaN为有效。。。这意味着我必须写额外的逻辑?
var productSchema = new SimpleSchema({
name: {
type: String,
max: 64
},
sku: {
type: String,
max: 32
},
retail: {
type: Number,
decimal: true,
min: 0
},
cost: {
type: Number,
decimal: true,
min: 0
},
qty: {
type: Number,
min: 0
}
});