Поиск внутри строки

#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')
);