C#/문자열

[C#]문자열이 숫자인지 체크하는 방법

DevStory 2022. 9. 14.

문자열이 숫자인지 체크하는 방법

이번 포스팅은 C#에서 문자열이 숫자인지 체크할 수 있는 몇 가지 방법을 소개합니다.


방법 1. TryParse 메서드(권장)

C#의 숫자를 표현하는 기본 타입에서 TryParse() 메서드를 사용하여 문자열이 숫자인지 확인할 수 있습니다.

※ C#의 숫자 타입
byte(1) < short(2) < int(4) < long(8) < float(4) < double(8) < decimal(16)

정수: byte, short, int, long
실수: float, double, decimal

괄호 안의 숫자는 타입의 크기(byte)를 의미하며, long 타입은 float 타입보다 크지만 표현할 수 있는 숫자의 범위가 작습니다.

TryParse() 메서드는 문자열이 숫자인 경우 true를 반환하고 그렇지 않으면 false를 반환합니다.

 

아래 소스 코드는 int 타입의 TryParse() 메서드 구문입니다.

public static bool TryParse(string? s, out Int32 result);

첫 번째 매개변수에 문자열을 전달하고 두 번째 매개변수에 out 키워드와 함께 int 타입의 변수를 전달합니다. 첫 번째 매개변수로 전달된 문자열이 숫자인 경우 숫자로 변환된 값을 두 번째 매개변수에 반환하고 숫자가 아닌 경우 0을 반환합니다.

 

다음 예제는 int 타입의 TryParse() 메서드를 호출하여 문자열이 숫자인지 체크합니다.

class Program
{
  static void Main(string[] args)
  {
    int result;
    Console.WriteLine("TryParse() 메서드 호출 결과: " + int.TryParse("+100", out result));
    Console.WriteLine("result: " + result);
  }
}

[실행 결과]

TryParse() 메서드 호출 결과: True
result: 100

 

다음 예제는 숫자로 구성되지 않은 문자열을 int 타입의 TryParse() 메서드에 전달합니다.

class Program
{
  static void Main(string[] args)
  {
    int result;
    Console.WriteLine("TryParse() 메서드 호출 결과: " + int.TryParse("+Hello", out result));
    Console.WriteLine("result: " + result);
  }
}

[실행 결과]

TryParse() 메서드 호출 결과: False
result: 0

out 키워드

TryParse() 메서드의 두 번째 매개변수에 out 키워드가 존재합니다. out 키워드를 쉽게 이해하기 위해 다음 예제를 살펴봅시다.

 

일반적으로 매개변수를 전달하면 값만 전달되므로 메서드에서 값을 변경하더라도 기존 변수에는 아무런 영향이 없습니다.

class Program
{
  public static void setIntValue(int intParam)
  {
    intParam = 10;
  }

  static void Main(string[] args)
  {
    int intValue = 500;
    Console.WriteLine("setIntValue() 호출 전: " + intValue);

    setIntValue(intValue);
    Console.WriteLine("setIntValue() 호출 후: " + intValue);
  }
}

[실행 결과]

setIntValue() 호출 전: 500
setIntValue() 호출 후: 500

setIntValue() 메서드에 intparam의 값을 변경하더라도 Main문에 존재하는 intValue에는 어떠한 영향이 없습니다. setIntValue() 메서드를 호출할 때, 500이라는 값만 전달하기 때문이죠.

 

하지만, out 키워드를 사용하는 경우 setIntValue() 메서드는 Main문에 존재하는 intValue의 값을 변경합니다. 

class Program
{
  public static void setIntValue(out int intParam)
  {
    intParam = 10;
  }

  static void Main(string[] args)
  {
    int intValue = 500;
    Console.WriteLine("setIntValue() 호출 전: " + intValue);

    setIntValue(out intValue);
    Console.WriteLine("setIntValue() 호출 후: " + intValue);
  }
}

[실행 결과]

setIntValue() 호출 전: 500
setIntValue() 호출 후: 10

out 키워드를 사용하는 경우 setIntValue() 메서드에 값이 아닌 변수 intValue의 참조가 전달되므로 setIntValue() 메서드에서 intParam의 값을 변경하면, Main문제 존재하는 intValue도 변경된 값으로 적용됩니다.


방법 2. 정규 표현식

두 번째 방법으로 정규 표현식을 사용하여 문자열이 숫자인지 체크할 수 있습니다.

 

정규 표현식을 사용하기 위해 다음 네임스페이스를 추가합니다.

using System.Text.RegularExpressions;

 

Regex 클래스의 IsMatch() 메서드는 매개변수로 전달된 문자열이 주어진 패턴과 일치하면 true를 반환하고 그렇지 않으면 false를 반환합니다.

public static bool IsMatch(string input, string pattern);

다음 패턴을 사용하여 문자열이 숫자인지 판별합니다.

 

[-+]?

- 문자열 맨 앞에 + 문자와 - 문자를 허용합니다.

 

\d*

- 문자열에 최소한 하나 이상의 숫자가 존재해야 합니다.

 

\.\d+

- 0 ~ 1개의 소수점을 허용합니다.

 

다음 예제는 정규 표현식을 사용하여 문자열이 숫자인지 체크합니다.

class Program
{
  public static bool isNumber(string strValue)
  {
    return Regex.IsMatch(strValue, @"[-+]?\d*\.?\d+");
  }
  
  static void Main(string[] args)
  {
    Console.WriteLine("+10.12는 숫자인가? " + isNumber("+10.12"));
    Console.WriteLine("-10.12는 숫자인가? " + isNumber("-10.12"));
    Console.WriteLine("+0는 숫자인가? " + isNumber("+0"));
    Console.WriteLine("-0.000는 숫자인가? " + isNumber("-0.000"));
    Console.WriteLine("1.1.1는 숫자인가? " + isNumber("1.1.1"));
    Console.WriteLine("+는 숫자인가? " + isNumber("+"));
  }
}

[실행 결과]

+10.12는 숫자인가? True
-10.12는 숫자인가? True
+0는 숫자인가? True
-0.000는 숫자인가? True
1.1.1는 숫자인가? True
+는 숫자인가? False
반응형

댓글