簡體   English   中英

如何可靠地檢查 Javascript 字符串是否為數字

[英]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() 如果第一個字符是數字,則parseIntparseFloatString轉換為 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM