Javascript 整数验证未按预期工作

Javascript 整数验证未按预期工作,javascript,validation,integer,Javascript,Validation,Integer,多亏了这个站点上的一些答案,我构建了一个函数来验证javascript提示符中的整数。为了满足我的需要,我发现了如何使用isNaN和%的结果,但是肯定有什么问题,因为它仍然不起作用:这个验证函数只需要接受整数,作为额外的奖励,它还将接受一个特殊的关键字,该关键字稍后在程序中用于不同的用途 因此,之前我定义了: var value = prompt("Type an integer"); 在那之后,我调用了validation函数,其中包括三个条件:如果: 1) 字符串不是数字 2) 字符串%1

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

因此,之前我定义了:

var value = prompt("Type an integer");
在那之后,我调用了validation函数,其中包括三个条件:如果:

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

我做错了什么?非常感谢你的任何想法。我知道整数验证在这里已经被问过很多次了,在这里我有一些想法,但我可能遗漏了一些东西…

您可能会让事情变得太复杂了。。。快一点就行了

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


你一次只打了一个相等的

isNaN(value) = true

我假设出于您的目的,@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
  • “seven”返回
    false
神奇的单词“extra”返回
'extra'


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

=
是一个赋值运算符,相等比较运算符是
==
。非常正确,愚蠢的我。。。但是经过修正后,仍然不起作用。我可能想得太多了,我不确定问题是针对@elclars还是op,但是像
value=“0x04”
这样的东西会发生什么?谢谢你的提示!我是这方面的新手,刚开始使用javascript时,对php做了一些修改,但不知道正则表达式……不,我知道,但它是一个(十六进制)整数。他很可能不想接受除基数10以外的任何东西,在这种情况下,您的解决方案简单明了,可能比按照原来的方法更好。但是如果有理由允许使用十六进制等,那么正则表达式方法就不会像现在这样工作。事实上,我想除了十进制或十六进制之外,唯一的可能是八进制,例如,
064
,fwiw。哦,我明白你的意思了,是的,我不知道OP的需要,但是对于八进制的情况,你可以防止零,我猜
^[^0](\d+;额外)$
谢谢!完全正确。。。但这仍然不是主要问题。在纠正了那个愚蠢的错误后,例如,如果我输入数字2(应该是有效的),它会检测到它无效并提示我再次输入…@A.MatíasQuezada它似乎工作得有点太好了,例如,“3.4”似乎通过了测试哈哈,没错,我认为最好使用regex@elclars编写的。谢谢你的所有想法。尽管我的目的简单得多,但我从你的评论中学到了很多。
function isAnIntOrExtra(v) {
  if (parseInt(+v) === +v && v !== '') {
    return parseInt(+v);
  }
  else if (v === 'extra') {
    return v;
  }
  else {
    return false;
  }
}