1

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

所以,之前我已经定义:

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

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

1)字符串不是数字

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

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

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

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

我究竟做错了什么?非常感谢您的任何想法。我知道整数验证在这里被问了很多次,在这里我得到了一些想法,但我可能会遗漏一些东西......

4

4 回答 4

1

你可能把事情复杂化了……一个快速的正则表达式就可以了。

while (!/^(\d+|extra)$/i.test(value)) {
  ...
}
于 2012-10-07T22:14:54.337 回答
1

你只输入了一个等于

isNaN(value) = true
于 2012-10-07T22:20:33.623 回答
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));
于 2012-10-07T22:20:22.530 回答
0

我假设出于您的目的,@elclanrs 的答案就是您所需要的,并且是最简单和最直接的,但只是为了完整性和可疑的笑声,我很确定以下内容也可以满足您的需求:

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

在这里提琴

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

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

虽然这些都应该失败:

  • '4.5' 返回false
  • '2.4e-3' 返回false
  • '0xgc' 返回false
  • '' 返回false
  • “七”回报false

神奇的词“额外”又回来了'extra'

当然,它会以“1,345”之类的值“失败”,并且可能会直接翻转八进制表示法,将其视为十进制表示法(取决于 JavaScript 引擎?),但可以对其进行调整以处理这些情况也是如此,但实际上,您最好使用正则表达式。

于 2012-10-08T04:24:21.123 回答