1. 使用 isNaN()函数
isNaN()的缺点就在于 null, 空格以及空串会被按照 0 来处理
NaN: Not a Number
- /**
- * 判断是否是数字
- *
- **/
- function isRealNum(val){
- // isNaN()函数 把空串 空格 以及 NUll 按照 0 来处理 所以先去除,
- if(val === "" || val ==null){
- return false;
- }
- if(!isNaN(val)){
- // 对于空数组和只有一个数值成员的数组或全是数字组成的字符串, isNaN 返回 false, 例如:'123',[],[2],['123'],isNaN 返回 false,
- // 所以如果不需要 val 包含这些特殊情况, 则这个判断改写为 if(!isNaN(val) && typeof val === 'number' )
- return true;
- }
- else{
- return false;
- }
- }
isNaN()函数来判断一个值是数字的最正确的方法就是:
- // true: 数值型的, false: 非数值型
- function myIsNaN(value) {
- return typeof value === 'number' && !isNaN(value);
- }
isNaN()详解
参考链接:
对于空数组和只有一个数值成员的数组, isNaN 返回 false.
- isNaN([]) // false
- isNaN([123]) // false
- isNaN(['123']) // false
上面代码之所以返回 false, 原因是这些数组能被 Number 函数转成数值, 请参见《数据类型转换》一章.
因此, 使用 isNaN 之前, 最好判断一下数据类型.
- function myIsNaN(value) {
- return typeof value === 'number' && !isNaN(value);
- }
2. 使用正则表达式
(1), 校验只要是数字 (包含正负整数, 0 以及正负浮点数) 就返回 true
- /**
- * 校验只要是数字 (包含正负整数, 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;
- }
- }
(2), 校验正负正数就返回 true
- /**
- * 校验正负正数就返回 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;
- }
- }
3. 使用 parseFloat()函数
- /**
- * 验证数据 是数字: 返回 true; 不是数字: 返回 false
- **/
- function Number(val) {
- if (parseFloat(val).toString() == "NaN") {
- return false;
- } else {
- return true;
- }
- }
- //isNaN(val)不能判断空串或一个空格
- // 如果是一个空串, 空格或 null, 而 isNaN 是做为数字 0 进行处理的, 而 parseInt 与 parseFloat 是返回一个错误消息, 这个 isNaN 检查不严密而导致的.
来源: http://www.bubuko.com/infodetail-3209835.html