[英]How to Reliably Check if a Javascript String is a Number
你如何確定一個字符串是否代表一個數字?
直接且可能天真的方法是這樣的:
function is_number(my_str) {
return !isNaN(parseInt(my_str));
}
但是,上述方法不起作用。 請注意,以下所有內容都返回 true:
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");
問題是parseInt
似乎只看第一個詞。 關於更全面的解決方案的任何想法?
您可以使用Number() 。 如果第一個字符是數字,則parseInt
和parseFloat
將String
轉換為 Number。 但是Number()
檢查整個String
.Number 如果整個字符串不是數字,則返回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'));
您只需要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)
這是我基於正則表達式的努力:
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)); });
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.