整数验证无法按预期工作

时间:2012-10-07 22:11:03

标签: javascript validation integer

感谢这个网站上的一些答案,我构建了一个函数来验证javascript中提示符内的整数。我发现了如何使用isNaN%的结果来满足我的需求,但是必定有问题,因为它仍然不起作用:这个验证函数只需要接受整数,作为额外奖励,它还将接受在程序中稍后用于不同目的的特殊关键字。

所以,之前我已定义:

var value = prompt("Type an integer");

之后,我调用了验证函数,其中包括三个条件:如果出现以下情况,验证警告会跳转:

1)字符串不是数字

2)字符串%1不是0(表示不是整数)

3)字符串不是特殊关键字(“额外”),它也有效作为输入。

该函数需要循环并继续显示提示,直到写入有效数据。

while (isNaN(value) == true && value % 1 != 0 && value != "extra") {
    alert("Please, type an integer");
    var value = prompt("Type an integer");
}

我做错了什么?非常感谢您的任何想法。我知道这里已经多次询问整数验证了,这里我有一些想法,但我可能会遗漏一些......

4 个答案:

答案 0 :(得分:1)

你可能会使事情变得太复杂......快速regular expression会解决问题。

while (!/^(\d+|extra)$/i.test(value)) {
  ...
}

答案 1 :(得分:1)

您只在

输入了一个相等的内容
isNaN(value) = true

答案 2 :(得分:0)

jsFiddle示例

    var int = 10;
var str = "10";

var isInt = function(value) {
    return (str === 'extra' || !isNaN(parseInt(value, 16)) || /^\d+$/.test(value));
};

var isIntStrict = function(value) {
    return (isInt(value) && typeof value !== 'string');
}

console.log('false', isInt('kirk'));
console.log('true', isInt(int));
console.log('true', isInt(str));
console.log('true', 'strict - int', isIntStrict(int));
console.log('false','strict - string', isIntStrict(str));
console.log('false','strict - string', isIntStrict('0x04'));
console.log('true','strict - string', isIntStrict(0x04));

答案 3 :(得分:0)

我认为,为了你的目的,@ elclanrs的答案就是你在这里所需要的,而且是最简单和最直接的,但只是为了完整性和可疑的笑声,我很确定以下也会做你所做的事情寻找:

function isAnIntOrExtra(v) {
  if (parseInt(+v) === +v && v !== '') {
    return parseInt(+v);
  }
  else if (v === 'extra') {
    return v;
  }
  else {
    return false;
  }
}

Fiddle here

这些都应该传递并以十进制表示法返回一个整数:

  • '387'返回387
  • ' - 4'返回-4
  • '0'返回0
  • '2.4e3'返回2400
  • '0xf4'返回244

虽然这些都应该失败:

  • '4.5'返回false
  • '2.4e-3'返回false
  • '0xgc'返回false
  • ''返回false
  • 'seven'返回false

魔术词'extra'返回'extra'

当然,对于像'1,345'这样的值,它会“失败”,并且可能会在八进制表示法上滚动,将其视为十进制表示法(取决于JavaScript引擎?),但它可以进行调整以处理这些情况,但实际上,你最好使用正则表达式。