如何确定字符串是否代表数字?
直接且可能是幼稚的方式是这样的:
Project Key is not associated with current project or the script version doesn't exist.
但是,以上操作无效。请注意,以下所有内容均返回true:
function is_number(my_str) {
return !isNaN(parseInt(my_str));
}
问题在于is_number("3, 4, 5");
is_number("3, (123)");
is_number("3, 123)");
is_number("3, (123) (and foo bar)");
is_number("3 apples and 2 oranges");
似乎只看第一个单词。您对这里更全面的解决方案有任何想法吗?
答案 0 :(得分:1)
您可以使用Number()。
如果第一个字符是数字,则parseInt
和parseFloat
会将String
转换为Number。但是Number()
检查整个String
。如果整个字符串不是数字,则返回数字NaN
function is_number(my_str) {
return !isNaN(Number(my_str)) && Boolean(my_str) || my_str == 0;
}
console.log(is_number("3, 4, 5"));
console.log(is_number("3, (123)"));
console.log(is_number("3, 123)"));
console.log(is_number("3, (123) (and foo bar)"));
console.log(is_number("3 apples and 2 oranges"));
console.log(is_number(null));
console.log(is_number(undefined));
console.log(is_number(0));
console.log(is_number('0'));
答案 1 :(得分:0)
您只需要Number
console.log(Number("3, 4, 5") || false)
console.log(Number("3, (123)") || false)
console.log(Number("3, 123)") || false)
console.log(Number('123') || false)
答案 2 :(得分:0)
这是我基于正则表达式的工作:
function isNumber (string) {
return /^-?[0-9]+(?:\.[0-9]+)?(?:[eE][-+]?[0-9]+)?$/.test(string);
}
包括对前导符号,小数位和指数的支持。
如果返回true
,则可以使用JSON.parse
将字符串转换为数字:
function isNumber (string) {
return /^-?[0-9]+(?:\.[0-9]+)?(?:[eE][-+]?[0-9]+)?$/.test(string);
}
function convertNumber (string) {
if (isNumber(string)) {
return JSON.parse(string);
}
}
[
'0',
'1.2',
'-3.4',
'5.6789e100',
'0.1e-100',
'0.1e+100',
].forEach(string => {
console.log(`isNumber('${string}'):`, isNumber(string));
console.log(`typeof convertNumber('${string}'):`, typeof convertNumber(string));
});