어떤 문자열이 숫자인지(숫자로 변환 가능한지) 체크하는 방법에 대해서 알아보겠습니다.

간혹 숫자가 문자열로 되어있는 경우, 연산이 안되기 때문에 number 타입으로 변환해야 하는데요, 문자열이 숫자인지 체크하는 방법을 소개합니다.

1. isNaN()을 이용한 방법

isNaN(str)은 str이 숫자로 변환할 수 없을 때 true를 리턴합니다. NaN은 Not a Number(숫자가 아님)를 의미합니다.

const str = "123";
if (!isNaN(str)) {
  console.log("문자열은 숫자입니다.");
} else {
  console.log("문자열은 숫자가 아닙니다.");
}

Output:

문자열은 숫자입니다.

다양한 케이스

isNaN()을 사용하여 숫자로 구분할 수 있는 케이스는 아래와 같습니다.

true를 리턴하는 경우는 배열, “NaN”, 문자열 등이며, 그 외의 경우는 대부분 false를 리턴합니다.

console.log(!isNaN("NaN")); // false
console.log(!isNaN("str1")); // false
console.log(!isNaN([1, 2])); // false

console.log(!isNaN("1")); // true
console.log(!isNaN("+1")); // true
console.log(!isNaN("-1")); // true
console.log(!isNaN("1.0")); // true
console.log(!isNaN("1.1")); // true
console.log(!isNaN("1e10")); // true
console.log(!isNaN("2e-5")); // true
console.log(!isNaN("0xFFFFFF")); // true
console.log(!isNaN("Infinity")); // true
console.log(!isNaN("-Infinity")); // true
console.log(!isNaN(new String("1"))); // true
console.log(!isNaN(123)); // true

2. 정규표현식을 이용한 방법

정규표현식으로 문자열이 숫자인지 확인할 수 있습니다.

  • pattern.test(str)은 str이 pattern 조건에 해당한다면 true 리턴
  • 패턴 ^\d+$는 문자열 시작부터 끝까지 숫자인 경우를 의미
  • 패턴 ^는 문자열 시작, $는 문자열 끝, \d는 숫자, +는 앞의 문자가 1개 또는 1개 이상
const str = "123";
if (/^\d+$/.test(str)) {
  console.log("문자열은 숫자입니다.");
} else {
  console.log("문자열은 숫자가 아닙니다.");
}

Output:

문자열은 숫자입니다.

3. 문자열이 숫자일 때, number 타입으로 변환

문자열이 숫자일 때, 문자열을 파싱하여 number 타입으로 변환할 수 있습니다.

  • parseInt(str)은 문자열을 number 타입으로 변환하여 리턴
const str = "123";
if (!isNaN(str)) {
  console.log("문자열은 숫자입니다.");
  const num = parseInt(str);
  console.log(typeof num);
} else {
  console.log("문자열은 숫자가 아닙니다.");
}

Output:

문자열은 숫자입니다.
number