Meteor 如何使用check()或Match.test()验证数字?

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()

我试图在一个方法中进行验证,该方法设置为在基本库存中创建产品,但表示货币ie、99或99.95的数字通过check()和Match.test()运行,并抛出匹配失败或返回false:

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
    }
});