JavaScript判断变量是否为正整数及有效数字的多种方法
本文详解JavaScript中判断变量是否为正整数及有效数字的多种方案。涵盖正则表达式匹配、jQuery的$.isNumeric()方法、typeof运算符结合isNaN与isFinite的使用,以及一元加号运算符的技巧。重点分析各方法在处理字符串、Infinity及NaN时的差异与局限性,帮助开发者选择最合适的数值校验方式。
本文将探讨在JavaScript中验证变量是否代表有效数字的各种方法。
1. 使用正则表达式检测字符串 在JavaScript中,正则表达式是检测字符串模式的标准方式。以下是判断输入值是否为正整数的代码示例:
<script type=”text/javascript”>
function test() {
var num = document.getElementById(“num”).value;
if (num==”") {
alert(‘请输入内容');
return false;
}
if (!(/(^[1-9]\d*$)/.test(num))) {
alert(‘输入的不是正整数');
return false;
}else {
alert(‘输入的是正整数');
}
}
</script>
<html>
<body>
<input type=”text” id=”num” />
<input type=”button” value=”测试” οnclick=”return test()” />
</body>
</html>
扩展阅读:
以下是判断各类数字(整数、浮点数)的正则表达式汇总:
- “^\\d+$” // 非负整数(正整数 + 0)
- “^[0-9]*[1-9][0-9]*$” // 正整数
- “^((-\\d+)|(0+))$” // 非正整数(负整数 + 0)
- “^-[0-9]*[1-9][0-9]*$” // 负整数
- “^-?\\d+$” // 整数
- “^\\d+(\\.\\d+)?$” // 非负浮点数(正浮点数 + 0)
- “^(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*))$” // 正浮点数
- “^((-\\d+(\\.\\d+)?)|(0+(\\.0+)?))$” // 非正浮点数(负浮点数 + 0)
- “^(-?\\d+)(\\.\\d+)?$” // 浮点数
2. 使用 jQuery 库
借助 jQuery 库,可以使用 $.isNumeric() 方法来判断传入的值是否代表有效的数值。如果该值是 number 或 string 类型,且能强制转换为有限数,则返回 true。
const { JSDOM } = require("jsdom");
const { window } = new JSDOM();
var $ = require("jquery")(window);
const isNumber = n => $.isNumeric(n);
isNumber(1); // true
isNumber(0); // true
isNumber(-1); // true
isNumber(new Number(1)); // true
isNumber(1.0); // true
isNumber(1.1); // true
isNumber(Math.PI); // true
isNumber('1'); // true
isNumber('string'); // false
isNumber(NaN); // false
isNumber(Infinity); // false
isNumber(-Infinity); // false
isNumber(true); // false
isNumber(undefined) // false
isNumber([1]); // false3. 使用 typeof 操作符
在原生 JavaScript 中,可以使用 typeof 运算符,它返回一个表示操作数类型的字符串。结合严格相等运算符,可以检查原始数值类型。此外,对于 Number 对象,可以使用 instanceof 运算符进行判断,示例如下:
const isNumber = n => (typeof(n) === 'number' || n instanceof Number);
isNumber(new Number(1)); // true
isNumber(0); // true
isNumber(-1); // true
isNumber(new Number(1)); // true
isNumber(1.0); // true
isNumber(1.1); // true
isNumber(Math.PI); // true
isNumber('1'); // false
isNumber('string'); // false
isNumber(NaN); // true
isNumber(Infinity); // true
isNumber(-Infinity); // true
isNumber(true); // false
isNumber(undefined); // false
isNumber([1]); // false上述方案在 +Infinity、-Infinity 和 NaN(非数字)的情况下会返回 true。此外,它无法处理那些可以强制转换为有限数字的字符串。为解决此问题,需添加附加条件,结合 isFinite() 和 isNaN() 方法。
const isNumber = n => (typeof(n) === 'number' || n instanceof Number ||
(typeof(n) === 'string' && !isNaN(n))) &&
isFinite(n);
isNumber(1); // true
isNumber(0); // true
isNumber(-1); // true
isNumber(new Number(1)); // true
isNumber(1.0); // true
isNumber(1.1); // true
isNumber(Math.PI); // true
isNumber('1'); // true
isNumber('string'); // false
isNumber(NaN); // false
isNumber(Infinity); // false
isNumber(-Infinity); // false
isNumber(true); // false
isNumber(undefined); // false
isNumber([1]); // false4. 使用一元加号运算符
最后,可以通过检查数值的一元加号(+)运算符来判断,具体实现如下:
const isNumber = n => (n === +n);
isNumber(1); // true
isNumber(0); // true
isNumber(-1); // true
isNumber(new Number(1)); // false
isNumber(1.0); // true
isNumber(1.1); // true
isNumber(Math.PI); // true
isNumber('1'); // false
isNumber('string'); // false
isNumber(NaN); // false
isNumber(Infinity); // true
isNumber(-Infinity); // true
isNumber(true); // false
isNumber(undefined); // false
isNumber([1]); // false请注意,此方法不适用于 Number 对象,且会将 +Infinity 和 -Infinity 视为数字。此外,它同样无法处理可以强制转换为有限数字的字符串。这些问题可以通过与前一种方案相同的附加条件来处理。
5. 使用 isNaN() 函数
isNaN() 函数的一个缺点在于,null、空格以及空字符串会被按照 0 来处理,导致判断结果可能与预期不符。
NaN: Not a Number(非数字)
/**
*判断是否是数字
*
**/
function isRealNum(val){
// isNaN()函数 把空串 空格 以及NUll 按照0来处理 所以先去除
// if(val === "" || val ==null){
// return false;
//}
//或者 直接判断 前提是要将值转为number类型
if(typeof val !== 'number'){
return false;
}else{
if(!isNaN(val)){
return true;
}else{
return false;
}
}
}6. 使用正则表达式
/**
* 校验只要是数字(包含正负整数,0以及正负浮点数)就返回true
**/
function isNumber(val){
var regPos = /^\d+(\.\d+)?$/; //非负浮点数
var regNeg = /^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$/; //负浮点数
if(regPos.test(val) || regNeg.test(val)){
return true;
}else{
return false;
}
}
/**
* 校验正负正数就返回true
**/
function isIntNum(val){
var regPos = / ^\d+$/; // 非负整数
var regNeg = /^\-[1-9][0-9]*$/; // 负整数
if(regPos.test(val) || regNeg.test(val)){
return true;
}else{
return false;
}
}总结
至此,关于 JavaScript 判断输入值是否为正整数的文章介绍完毕。更多相关 JS 判断输入值为正整数的内容,请搜索本站以前的文章或继续浏览下面的相关文章,希望大家以后多多支持本站!
JavaScript闭包与类(Class)的区别及适用场景对比
2026-11-05 15:48:57
JavaScript入门要学ES6吗?let与箭头函数等新特性解析
2026-11-05 14:49:16
JavaScript 8种数据类型详解:基本类型与引用类型的区别
2026-11-05 14:25:15
怎么在JavaScript中使用async/await优化Ajax异步流程
2026-11-05 13:56:15
JavaScript replace回调函数实现动态正则替换逻辑
2026-11-05 13:52:13
