js 判断字符串是否全是数字,求解

js 判断字符串是否全是数字

阅读 37.5k
7 个回答
var a = '123qwrqwr';
var b = '2253545625';
var c = 'q1.2.41.';
var reg = /^[\d]+$/;
var s = reg.test(a);
var s1 = reg.test(b);
var s2 = reg.test(c);
console.log(s, s1, s2);

可能也有小数点

var test = ['123.12', '.123', '123.', '123a'];
var reg = /^[\d|\.]*$/;
test.forEach((v) => {
  console.log(v, reg.test(v));
});

除了正则,isNaN或许更好。

var test = ['123.12', '.123', '123.', '123a', '1e+43'];

test.forEach((v) => {
  console.log(v, !isNaN(v));
});

简单总结一下,判断一个给定的number类型或者string类型表示的数是否合法有效,可以使用!isNaN或者正则表达式来处理。

示例:对于给定的的各种类型的数字表示(主要包含整数、小数、科学计数以及对应的正负数表示)如下。

var numbers = [
    123, +123, -123,
    '123', '+123', '-123',
    123.4, +123.4, -123.4,
    '123.4', '+123.4', '-123.4',
    123., +123., -123.,
    '123.', '+123.', '-123.',
    .123,, +.123, -.123,
    '.123', '+.123', '-.123',
    1.23e+20, +1.23e+20, -1.23e+20,
    '1.23e+20', '+1.23e+20', '-1.23e+20',
    '123.4.5',
    '123abc456',
    undefined
];

1、使用!isNaN来进行判定。

numbers.forEach((v) => {
  console.log(typeof(v), "\t", v, "\t", !isNaN(v));
});

结果如下:

number      123      true
number      123      true
number      -123      true
string      123      true
string      +123      true
string      -123      true
number      123.4      true
number      123.4      true
number      -123.4      true
string      123.4      true
string      +123.4      true
string      -123.4      true
number      123      true
number      123      true
number      -123      true
string      123.      true
string      +123.      true
string      -123.      true
number      0.123      true
number      0.123      true
number      -0.123      true
string      .123      true
string      +.123      true
string      -.123      true
number      123000000000000000000      true
number      123000000000000000000      true
number      -123000000000000000000      true
string      1.23e+20      true
string      +1.23e+20      true
string      -1.23e+20      true
string      123.4.5      false
string      123abc456      false
undefined      undefined      false

2、使用正则表达式来进行判定:整数,不带符号

var reg = /^[\d]+$/;
numbers.forEach((v) => {
  console.log(typeof(v), "\t", v, "\t", reg.test(v));
});

结果如下:

number      123      true
number      123      true
number      -123      false
string      123      true
string      +123      false
string      -123      false
number      123.4      false
number      123.4      false
number      -123.4      false
string      123.4      false
string      +123.4      false
string      -123.4      false
number      123      true
number      123      true
number      -123      false
string      123.      false
string      +123.      false
string      -123.      false
number      0.123      false
number      0.123      false
number      -0.123      false
string      .123      false
string      +.123      false
string      -.123      false
number      123000000000000000000      true
number      123000000000000000000      true
number      -123000000000000000000      false
string      1.23e+20      false
string      +1.23e+20      false
string      -1.23e+20      false
string      123.4.5      false
string      123abc456      false
undefined      undefined      false

3、使用正则表达式来进行判定:整数 + 小数 + 科学计数,带符号

var reg = /^[\+-]?(\d+\.?\d*|\.\d+|\d\.\d+e\+\d+)$/;
numbers.forEach((v) => {
  console.log(typeof(v), "\t", v, "\t", reg.test(v));
});

结果如下:

number      123      true
number      123      true
number      -123      true
string      123      true
string      +123      true
string      -123      true
number      123.4      true
number      123.4      true
number      -123.4      true
string      123.4      true
string      +123.4      true
string      -123.4      true
number      123      true
number      123      true
number      -123      true
string      123.      true
string      +123.      true
string      -123.      true
number      0.123      true
number      0.123      true
number      -0.123      true
string      .123      true
string      +.123      true
string      -.123      true
number      123000000000000000000      true
number      123000000000000000000      true
number      -123000000000000000000      true
string      1.23e+20      true
string      +1.23e+20      true
string      -1.23e+20      true
string      123.4.5      false
string      123abc456      false
undefined      undefined      false
  • 对于number类型的数,会将诸如:.123、123.、+123表示的数转换为标准化的表示:123,之后再进行进一步的处理。
  • 对于number类型的数,如果是科学计数法表示,则会将其展开后再进行进一步的处理。

楼上除了 正则,也可以用另外一种

var str = '1311ww,ww';
var str2 = '11111'
function isAllNaN(str) {
    for (var i = 0; i < str.length; i++) {
        if(isNaN(str.charAt(i))) {
            return '不都是整数'
        }
    }
    return '都是整数'
}
alert(isAllNaN(str))
alert(isAllNaN(str2))

不好意思哈,没测试,现在可以了, 小数点也是可以的

新手上路,请多包涵
const is_numeric = (value) => {
    if (typeof(value) === 'object') {
        return false;
    } else {
        return !Number.isNaN(Number(value));
    }  
};

is_numeric({});    //false
is_numeric([]);    //false
is_numeric('poi'); //false
is_numeric('1');   //true
is_numeric('1.214');   //true

1L正解,直接isNaN(str),不需要遍历也不需要转换数据格式

不要直接使用 isNaN().

这样用更好:

function isNumber(value) {
  return !Number.isNaN(Number(value))
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题