Как вы определяете, представляет ли строка число?
Простой и потенциально наивный способ заключается в следующем:
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
кажется, смотрит только на первое слово. Любая идея о более всеобъемлющем решении здесь?
Вы можете использовать номер(). parseInt
и parseFloat
преобразуют String
в число, если первый символ является числом. Но 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));
});
is_number(null) == true
, но обратите вниманиеis_number(null) == true