我想要做的是确定字符串是否为数字。我想知道人们对我想要解决的两个解决方案的看法(或者如果有一个我还没有找到的更好的解决方案)。 parseInt函数不合适,因为它将为“40岁”之类的参数返回一个整数值。我决定的两个解决方案是:
将Integer.valueOf()与try catch
一起使用function isNumeric(quantity)
{
var isNumeric = true
try
{
Integer.valueOf(quantity)
}
catch(err)
{
isNumeric = false
}
return isNumeric
}
或单独检查每个角色
function IsNumeric(quantity)
{
var validChars = "0123456789";
var isNumber = true;
var nextChar;
for (i = 0; i < quantity.length && isNumber == true; i++)
{
nexChar = quantity.charAt(i);
if (validChars.indexOf(nextChar) == -1)
{
isNumber = false;
}
}
return IsNumber;
}
我原本以为会有比这两者更简单的解决方案。我错过了什么吗?
注意:我正在使用jQuery aswel,所以如果有一个jQuery解决方案那就足够了
答案 0 :(得分:11)
我必须做你想要的事情,但我需要验证一个变量是否包含一个数字而不知道它的类型,它可能是一个数字字符串(也考虑指数表示法等),一个Number对象,基本上任何东西
我必须注意隐式类型转换,例如!isNaN(true) == true
不好。
我最终编写了一组30+单元测试,你可以找到here,我使用以下函数,它通过了我的所有测试:
function isNumber(n) {
return !isNaN(parseFloat(n)) && isFinite(n);
}
答案 1 :(得分:7)
为什么不isNaN(obj)
?
function IsNumeric (value) {
return (!((isNaN(value)) || (value.length == 0)));
}
答案 2 :(得分:4)
正则表达式怎么样?
function IsNumeric(string) {
return string.match(/^\d+$/) !== null;
}
(没有测试或非常防守,但你明白了)
答案 3 :(得分:1)
这适用于大多数值
function isNumericString(s)
{
return !!s && !isNaN(+s);
}
一般情况下,一元+是转换为数字的最佳方式。没有基础问题,没有悬空的非数字问题。
答案 4 :(得分:0)
我想你可以使用正则表达式来验证输入,但老实说,我看不出第一个有什么问题。
答案 5 :(得分:0)
如果您只测试字符串,为什么不让任何字符串使用该方法?
String.prototype.isNumeric= function(){
return parseFloat(this)== this;
}
答案 6 :(得分:0)
以下是我的parseInt解决方案:
var str = "40 years old";
var isNumeric = parseInt(str) == str ? true : false;