javascript - 检查字符是否为数字?

我需要检查是否justPrices[i].substr(commapos+2,1)

字符串类似于:“blabla,120”

在这种情况下,它将检查'0'是否是数字。 如何才能做到这一点?

18个解决方案
104 votes

您可以使用isNaN()检查它是否不是数字:

var c = justPrices[i].substr(commapos + 2, 1);

if (!isNaN(parseInt(c, 10))) {
    // Is a number
}

或者更详细地说:

if ('0123456789'.indexOf(c) !== -1) {
    // Is a number
}
Blender answered 2019-06-15T15:26:34Z
42 votes

您可以使用比较运算符来查看它是否在数字字符范围内:

var c = justPrices[i].substr(commapos+2,1);
if (c >= '0' && c <= '9') {
    // it is a number
} else {
    // it isn't
}
GregL answered 2019-06-15T15:26:59Z
27 votes

你既可以使用parseInt,也可以查看isNaN

或者如果你想直接在你的字符串上工作,你可以像这样使用regexp:

function is_numeric(str){
    return /^\d+$/.test(str);
}
Yaron U. answered 2019-06-15T15:27:38Z
16 votes

编辑:如果你只是检查一个字符(即isNumeric),Blender的更新答案是正确的答案。 如果你想测试整个字符串,下面的答案是一个很好的解决方案。

这是jQuery的isNumeric实现(在纯JavaScript中),它对全字符串起作用:

function isNumeric(s) {
    return !isNaN(s - parseFloat(s));
}

该函数的注释如下:

// parseFloat NaNs数值投射误报(null | true | false |“”)
// ...但是误解了前导数字符串,尤其是十六进制文字(“0x ...”)
//减法迫使NaN无穷大

我想我们可以相信这些人已经花了很多时间在这上面!

评论来源在这里。 超级极客在这里讨论。

jackocnr answered 2019-06-15T15:29:00Z
15 votes

你可以用这个:

function isDigit(n) {
    return Boolean([true, true, true, true, true, true, true, true, true, true][n]);
}

在这里,我将其与公认的方法进行了比较:[http://jsperf.com/isdigittest/5]。 我没想到太多,所以当我发现接受的方法慢得多时,我感到非常惊讶。

有趣的是,虽然接受的方法是更快的正确输入(例如'5')而更慢的正确输入(例如'a'),我的方法完全相反(快速为不正确,较慢为正确)。

尽管如此,在最坏的情况下,我的方法比正确输入的接受解决方案快2倍,不正确输入快5倍。

user2486570 answered 2019-06-15T15:29:44Z
10 votes

我想知道为什么没有人发布过如下解决方案:

var charCodeZero = "0".charCodeAt(0);
var charCodeNine = "9".charCodeAt(0);

function isDigitCode(n) {
   return(n >= charCodeZero && n <= charCodeNine);
}

调用如:

if (isDigitCode(justPrices[i].charCodeAt(commapos+2))) {
    ... // digit
} else {
    ... // not a digit
}
Marian answered 2019-06-15T15:30:17Z
8 votes

我认为找到解决这个问题的方法非常有趣。 以下是一些。
(以下所有函数假设参数是单个字符。更改为n[0]以强制执行)

方法1:

function isCharDigit(n){
  return !!n.trim() && n > -1;
}

方法2:

function isCharDigit(n){
  return !!n.trim() && n*0==0;
}

方法3:

function isCharDigit(n){
  return !!n.trim() && !!Number(n+.1); // "+.1' to make it work with "." and "0" Chars
}

方法4:

var isCharDigit = (function(){
  var a = [1,1,1,1,1,1,1,1,1,1];
  return function(n){
    return !!a[n] // check if `a` Array has anything in index 'n'. Cast result to boolean
  }
})();

方法5:

function isCharDigit(n){
  return !!n.trim() && !isNaN(+n);
}

测试字符串:

var str = ' 90ABcd#?:.+', char;
for( char of str ) 
  console.log( char, isCharDigit(char) );
vsync answered 2019-06-15T15:31:17Z
5 votes

功能简单

function isCharNumber(c){
    return c >= '0' && c <= '9';
}
João Pimentel Ferreira answered 2019-06-15T15:31:39Z
4 votes

如果您正在测试单个字符,那么:

var isDigit = (function() {
    var re = /^\d$/;
    return function(c) {
        return re.test(c);
    }
}());

将返回true或false,具体取决于c是否为数字。

RobG answered 2019-06-15T15:32:13Z
2 votes

我建议一个简单的正则表达式。

如果您正在寻找字符串中的最后一个字符:

/^.*?[0-9]$/.test("blabla,120");  // true
/^.*?[0-9]$/.test("blabla,120a"); // false
/^.*?[0-9]$/.test("120");         // true
/^.*?[0-9]$/.test(120);           // true
/^.*?[0-9]$/.test(undefined);     // false
/^.*?[0-9]$/.test(-1);            // true
/^.*?[0-9]$/.test("-1");          // true
/^.*?[0-9]$/.test(false);         // false
/^.*?[0-9]$/.test(true);          // false

如果你只是检查一个char作为输入,那么正则表达式更简单:

var char = "0";
/^[0-9]$/.test(char);             // true
zenslug answered 2019-06-15T15:32:55Z
1 votes
isNumber = function(obj, strict) {
    var strict = strict === true ? true : false;
    if (strict) {
        return !isNaN(obj) && obj instanceof Number ? true : false;
    } else {
        return !isNaN(obj - parseFloat(obj));
    }
}

没有严格模式的输出:

var num = 14;
var textnum = '14';
var text = 'yo';
var nan = NaN;

isNumber(num);
isNumber(textnum);
isNumber(text);
isNumber(nan);

true
true
false
false

输出严格模式:

var num = 14;
var textnum = '14';
var text = 'yo';
var nan = NaN;

isNumber(num, true);
isNumber(textnum, true);
isNumber(text, true);
isNumber(nan);

true
false
false
false
Banning Stuckey answered 2019-06-15T15:33:35Z
1 votes

尝试:

function is_numeric(str){
        try {
           return isFinite(str)
        }
        catch(err) {
            return false
        }
    }
Insp answered 2019-06-15T15:33:56Z
0 votes

这似乎有效:

静态绑定:

String.isNumeric = function (value) {
    return !isNaN(String(value) * 1);
};

原型绑定:

String.prototype.isNumeric = function () {
    return !isNaN(this.valueOf() * 1);
};

它将检查单个字符以及整个字符串以查看它们是否为数字。

series0ne answered 2019-06-15T15:34:39Z
0 votes
var Is = {
    character: {
        number: (function() {
            // Only computed once
            var zero = "0".charCodeAt(0);
            var nine = "9".charCodeAt(0);

            return function(c) {
                return (c = c.charCodeAt(0)) >= zero && c <= nine;
            }
        })()
    }
};
momo answered 2019-06-15T15:34:58Z
0 votes
square = function(a) {
    if ((a * 0) == 0) {
        return a*a;
    } else {
        return "Enter a valid number.";
    }
}

资源

Lourayad answered 2019-06-15T15:35:25Z
0 votes
function is_numeric(mixed_var) {
    return (typeof(mixed_var) === 'number' || typeof(mixed_var) === 'string') &&
        mixed_var !== '' && !isNaN(mixed_var);
}

源代码

Alexander Serkin answered 2019-06-15T15:35:50Z
0 votes

你可以尝试这个(在我的情况下工作)

如果要测试字符串的第一个字符是否为int:

if (parseInt(YOUR_STRING.slice(0, 1))) {
    alert("first char is int")
} else {
    alert("first char is not int")
}

如果要测试char是否为int:

if (parseInt(YOUR_CHAR)) {
    alert("first char is int")
} else {
    alert("first char is not int")
}
TheOne LuKcian answered 2019-06-15T15:36:38Z
-1 votes

只需使用isFinite

const number = "1";
if (isFinite(number)) {
    // do something
}
Gibolt answered 2019-06-15T15:37:08Z
translate from https://stackoverflow.com:/questions/8935632/check-if-character-is-number