输入0时大于功能不起作用

时间:2019-08-20 01:46:22

标签: javascript

我需要验证用户输入,其中用户只能输入不等于但大于0且小于规定值的值。如果我提供某些对象,我的验证逻辑将起作用

{required:true, greaterThan: 1, smallerThan: 50}

在这里,如果我输入的值为0,则显示错误消息value should be greater than 1,但如果出现这种情况,我会改为提供以下对象

{required:true, greaterThan: 0, smallerThan: 50}

我输入值0,那么它不会显示错误消息value should be greater than 0

这是我的验证逻辑

if (fieldValue.smallerThan && value && parseInt(value, 10) > fieldValue.smallerThan) {
    set(
        errors,
        key,
        `${fieldValue.label} should be smaller than ${fieldValue.smallerThan}`,
    )
    }
if (fieldValue.greaterThan && value && parseInt(value, 10) < fieldValue.greaterThan) {
    set(
        errors,
        key,
        `${fieldValue.label} should be greator than ${fieldValue.greaterThan}`,
    )
}

3 个答案:

答案 0 :(得分:0)

0 && any value

由于在JavaScript中将false视为0值,因此总是会产生falsy

您可以做的是

fieldValue.greaterThan >= 0 && ..

答案 1 :(得分:0)

如果您只是在检查fieldValue中是否存在大于属性,这似乎就是您正在做的事情,那么您可能还考虑将两个检查编辑为:

如果(fieldValue.smallerThan!==未定义&& ...)

如果(fieldValue.greaterThan!==未定义&& ...)

通常,依赖于值的真实性或虚假性会使您陷入麻烦,并且最好明确说明要检查的内容。

答案 2 :(得分:0)

始终将您的输入转换为整数或浮点数。

if(!(fieldValue.smallerThan < parseInt(value))){
  ...value must be smaller than 50
}

if(!(fieldValue.greaterThan > parseInt(value))){
  ...value must be greater than 0
}