检查字符是否是数字?
我需要检查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 }