检查字符是否是数字?

时间:2012-01-20 01:12:55

标签: javascript

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

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

在这种情况下,它会检查'0'是否为数字。怎么办呢?

25 个答案:

答案 0 :(得分:115)

您可以使用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
}

如果您不关心Internet Explorer:

if ('0123456789'.includes(c)) {
    // Is a number
}

答案 1 :(得分:46)

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

var c = justPrices[i].substr(commapos+2,1);
if (c >= '0' && c <= '9') {
    // it is a number
} else {
    // it isn't
}

答案 2 :(得分:27)

您可以使用parseInt而不是isNaN

或者如果你想直接在你的字符串上工作,你可以使用这样的正则表达式:

function is_numeric(str){
    return /^\d+$/.test(str);
}

答案 3 :(得分:17)

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

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

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

此功能的评论如下:

  

// parseFloat NaNs numeric-cast false positives(null | true | false |“”)
  // ...但是误解了前导数字符串,尤其是十六进制文字(“0x ...”)
  //减法强制无穷大于NaN

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

评论来源here。超级极客讨论here

答案 4 :(得分:15)

您可以使用:

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

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

有趣的是,虽然接受的方法是更快的正确输入(例如,&#39; 5&#39;)而且对于不正确的更慢(例如&#39; a&#39;),我的方法恰恰相反(快速不正确,慢速正确)。

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

答案 5 :(得分:13)

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

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
}

答案 6 :(得分:10)

我认为想办法解决这个问题非常有趣。以下是一些。
假设参数下面的所有函数都是单个字符。更改为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) );

答案 7 :(得分:6)

简单功能

function isCharNumber(c){
    return c >= '0' && c <= '9';
}

答案 8 :(得分:4)

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

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

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

答案 9 :(得分:3)

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

如果您只想查找字符串中的最后一个字符:

/^.*?[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

如果只检查单个字符作为输入,则正则表达式甚至更简单:

var char = "0";
/^[0-9]$/.test(char);             // true

答案 10 :(得分:2)

最短的解决方案是:

const isCharDigit = n => n < 10;

您也可以应用这些:

const isCharDigit = n => Boolean(++n);

const isCharDigit = n => '/' < n && n < ':';

const isCharDigit = n => !!++n;

如果您要检查多个聊天对象,则可以使用下一个变体

正则表达式:

const isDigit = n => /\d+/.test(n);

比较:

const isDigit = n => +n == n;

检查它是否不是NaN

const isDigit = n => !isNaN(n);

答案 11 :(得分:1)

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

答案 12 :(得分:1)

尝试:

data = Convert.ToUInt16(splitdata, 16);

答案 13 :(得分:0)

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

答案 14 :(得分:0)

这似乎有效:

静态绑定:

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

原型绑定:

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

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

答案 15 :(得分:0)

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

如果要测试字符串的第一个字符是否为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")
}

答案 16 :(得分:0)

square = function(a) {
    if ((a * 0) == 0) {
        return a*a;
    } else {
        return "Enter a valid number.";
    }
}

Source

答案 17 :(得分:0)

利用语言的动态类型检查的简单解决方案:

function isNumber (string) {
   //it has whitespace
   if(string === ' '.repeat(string.length)){
     return false
   }
   return string - 0 === string * 1
}

请参阅下面的测试用例

function isNumber (string) {
   if(string === ' '.repeat(string.length)){
 return false
   }
   return string - 0 === string * 1
}


console.log('-1' + ' → ' + isNumber ('-1'))    
console.log('-1.5' + ' → ' + isNumber ('-1.5')) 
console.log('0' + ' → ' + isNumber ('0'))    
console.log(', ,' + ' → ' + isNumber (', ,'))  
console.log('0.42' + ' → ' + isNumber ('0.42'))   
console.log('.42' + ' → ' + isNumber ('.42'))    
console.log('#abcdef' + ' → ' + isNumber ('#abcdef'))
console.log('1.2.3' + ' → ' + isNumber ('1.2.3')) 
console.log('' + ' → ' + isNumber (''))    
console.log('blah' + ' → ' + isNumber ('blah'))

答案 18 :(得分:0)

检查字符串是否为数字:

function isNumber(n){
    return !!+n;
}

// example:
// isNumber(' ') -> false
// isNumber('.3425e9') -> true

它也适用于字符,甚至比数组查找方法还要快。

答案 19 :(得分:0)

function is_numeric(mixed_var) {
    return (typeof(mixed_var) === 'number' || typeof(mixed_var) === 'string') &&
        mixed_var !== '' && !isNaN(mixed_var);
}

Source code

答案 20 :(得分:0)

据我所知,最简单的方法就是乘以1

var character = ... ; // your character
var isDigit = ! isNaN(character * 1);

乘以1可以从任何数字字符串中得到一个数字(因为您只有一个字符,它将始终是0到9之间的整数),而对于任何其他字符串则是NaN

答案 21 :(得分:0)

类似于上面的答案之一,我使用了

 var sum = 0; //some value
 let num = parseInt(val); //or just Number.parseInt
 if(!isNaN(num)) {
     sum += num;
 }

此博客文章进一步阐明了此check if a string is numeric in Javascript | Typescript & ES6

答案 22 :(得分:0)

这是一个简单的函数。

function is_number(char) {{
    return !isNaN(parseInt(char));
}}

Returns:  true, false

快乐编码!

答案 23 :(得分:0)

我正在使用这个:

const isNumber = (str) => (
    str.length === str.trim().length 
    && str.length > 0
    && Number(str) >= 0
)

它适用于字符串或单个字符。

答案 24 :(得分:-1)

只需使用isFinite

即可
const number = "1";
if (isFinite(number)) {
    // do something
}