我希望在与旧的VB6 IsNumeric()函数相同的概念空间中有什么东西?
当前回答
以下内容如何?
const a = '1'
const isNumber = (a) => Number(a) === +a
其他回答
它对TypeScript无效,因为:
声明函数isNaN(数字:数字):布尔值;
对于TypeScript,您可以使用:
/^\d+$/.测试(键)
我认为isFinite()对所有人来说都是最好的。
设a=isFinite('abc')//false;设b=isFinite('123')//true;设c=isFinite('12a')//false;控制台日志(a、b、c)
也许有一两个人遇到这个问题,他们需要比平时更严格的检查(就像我一样)。在这种情况下,这可能很有用:
if(str === String(Number(str))) {
// it's a "perfectly formatted" number
}
当心这将拒绝类似于.1、40.000、080、00.1的字符串。它非常挑剔——字符串必须匹配数字的“最最小完美形式”才能通过测试。
它使用String和Number构造函数将字符串转换为一个数字,然后再次返回,从而检查JavaScript引擎的“完美最小形式”(用初始Number构造函数转换为的形式)是否与原始字符串匹配。
我的解决方案:
// returns true for positive ints;
// no scientific notation, hexadecimals or floating point dots
var isPositiveInt = function(str) {
var result = true, chr;
for (var i = 0, n = str.length; i < n; i++) {
chr = str.charAt(i);
if ((chr < "0" || chr > "9") && chr != ",") { //not digit or thousands separator
result = false;
break;
};
if (i == 0 && (chr == "0" || chr == ",")) { //should not start with 0 or ,
result = false;
break;
};
};
return result;
};
您可以在循环中添加其他条件,以满足您的特定需求。
我使用这个函数作为表单验证工具,我不希望用户能够编写指数函数,所以我想出了这个函数:
<script>
function isNumber(value, acceptScientificNotation) {
if(true !== acceptScientificNotation){
return /^-{0,1}\d+(\.\d+)?$/.test(value);
}
if (true === Array.isArray(value)) {
return false;
}
return !isNaN(parseInt(value, 10));
}
console.log(isNumber("")); // false
console.log(isNumber(false)); // false
console.log(isNumber(true)); // false
console.log(isNumber("0")); // true
console.log(isNumber("0.1")); // true
console.log(isNumber("12")); // true
console.log(isNumber("-12")); // true
console.log(isNumber(-45)); // true
console.log(isNumber({jo: "pi"})); // false
console.log(isNumber([])); // false
console.log(isNumber([78, 79])); // false
console.log(isNumber(NaN)); // false
console.log(isNumber(Infinity)); // false
console.log(isNumber(undefined)); // false
console.log(isNumber("0,1")); // false
console.log(isNumber("1e-1")); // false
console.log(isNumber("1e-1", true)); // true
</script>