检查字符是否是数字?

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

string是这样的:“blabla,120”

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

只要使用isNaN()来检查它是不是一个数字:

 if (!isNaN(parseInt(justPrices[i].substr(commapos + 2, 1), 10))) { // Is a number } 

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

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

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

或者如果你想直接在你的string上工作,你可以像这样使用正则expression式:

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

这里是jQuery的isNumeric实现(在纯JavaScript中),它可以处理完整的string:

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

这个函数的注释如下:

// parseFloat NaNs numeric-cast false positives(null | true | false |“”)
// …但曲解前导数字string,尤其是hex文字(“0x …”)
//减法强制NaN的无穷大

我想我们可以相信,这些队伍已经花了相当多的时间在这个!

在这里评论来源。 超级怪胎在这里讨论。

你可以使用这个:

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

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

有趣的是,虽然接受的方法是更快的正确input(例如'5'),并且对于不正确的(例如'a')较慢,但是我的方法是完全相反的(对于错误而言是快速的,对于正确的是较慢的)。

不过,在最坏的情况下,我的方法比正确input的可接受解决scheme快2倍,错误input快5倍。

我想知道为什么没有人发布解决scheme,如:

 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 } 

我觉得想办法解决这个问题很有趣。 下面是一些。
(下面的所有函数都假定参数是单个字符,改为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); } 

testingstring:

 var str = ' 90ABcd#?:.+', char; for( char of str ) console.log( char, isCharDigit(char) ); 

如果您正在testing单个字符,则:

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

将根据c是否是数字来返回true或false。

 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 
 function is_numeric (mixed_var) { return (typeof(mixed_var) === 'number' || typeof(mixed_var) === 'string') && mixed_var !== '' && !isNaN(mixed_var); } 

源代码

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

来源: http : //jacksondunstan.com/articles/983

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

如果你想testing一个string的第一个字符是否是int:

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

如果你想testing一下char是否是int:

 if (parseInt(YOUR_CHAR)){ alert("first char is int") }else{ alert("first char is not int") } 

这似乎工作:

静态绑定:

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

原型绑定:

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

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

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

只要使用isFinite

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