#javascript #string #escaping
#javascript #строка #экранирование
Вопрос:
Мне нужно проверить строку, что это фактическое число.
let str = 'n2';
Но Number(str) возвращает 2 вместо NaN.
Как я могу проверить, содержит ли данная строка какую-либо обратную косую черту?
Комментарии:
1. Это два отдельных вопроса. Что вы хотите: узнать, является ли строка числом или содержит обратную косую черту? (Чего нет в этой строке, кстати, она содержит как escape-символ.)
2. @NullDev
parseInt
недостаточно.3. Я просто хочу проверить, является ли данная строка фактическим числом, и в строку больше ничего не вводится. Но Number(‘n2’) возвращает число вместо NaN. Есть ли какой-либо другой способ проверить это?
4. На вопрос уже дан ответ.
5. если основная цель состоит в том, чтобы сверить число с символами пробела
/s/.test(str)
, я думаю, этого должно быть достаточно.
Ответ №1:
n
внутри строкового литерала интерпретируется как символ новой строки, а символы новой строки, как и все символы пробела, просто пропускаются, когда вы пытаетесь превратить строку в число:
// these are all whitespace characters
console.log(
Number(' 5'),
Number('n5'),
Number('t5'),
);
Если вы хотите извлечь число, только если строка содержит только числовые символы и ничего больше, я бы сопоставил цифры с регулярным выражением:
const extractNum = str => {
const match = str.match(/^d $/);
return match
? Number(match[0])
: NaN;
};
console.log(
extractNum('n5'),
extractNum('5')
);
Также разрешить десятичные дроби:
const extractNum = str => {
const match = str.match(/^d*(?:.d )?$/);
return match
? Number(match[0])
: NaN;
};
console.log(
extractNum('n5'),
extractNum('5'),
extractNum('0.123'),
extractNum('.55')
);