感谢这个网站上的一些答案,我构建了一个函数来验证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");
}
我做错了什么?非常感谢您的任何想法。我知道这里已经多次询问整数验证了,这里我有一些想法,但我可能会遗漏一些......
答案 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;
}
}
这些都应该传递并以十进制表示法返回一个整数:
387
-4
0
2400
244
虽然这些都应该失败:
false
false
false
false
false
魔术词'extra'返回'extra'
当然,对于像'1,345'这样的值,它会“失败”,并且可能会在八进制表示法上滚动,将其视为十进制表示法(取决于JavaScript引擎?),但它可以进行调整以处理这些情况,但实际上,你最好使用正则表达式。