[C#] 문자열이 숫자인지 식별

이 문자열이 있으면 :

  1. "abc" = false

  2. "123" = true

  3. "ab2" = false

IsNumeric()문자열이 유효한 숫자인지 식별 ​​할 수 있는 명령 이 있습니까?



답변

int n;
bool isNumeric = int.TryParse("123", out n);

C # 7부터 업데이트 :

var isNumeric = int.TryParse("123", out int n);

또는 숫자가 필요하지 않으면 out 매개 변수를 버릴 수 있습니다

var isNumeric = int.TryParse("123", out _);

var에 들 각각의 유형에 의해 대체 될 수 있습니다!


답변

input모든 숫자 이면 true를 반환합니다 . 보다 나은지 TryParse모르지만 작동합니다.

Regex.IsMatch(input, @"^\d+$")

하나 이상의 숫자가 문자와 혼합되어 있는지 알고 싶다면 ^ +및을 그대로 두십시오 $.

Regex.IsMatch(input, @"\d")

편집 :
실제로 매우 긴 문자열이 잠재적으로 TryParse를 오버플로 할 수 있기 때문에 TryParse보다 낫다고 생각합니다.


답변

다음을 사용할 수도 있습니다.

stringTest.All(char.IsDigit);

그것은 반환 true모든 자리 숫자 (하지 않는 float) 및 false입력 문자열은 숫자의 어떤 종류 인 경우.

참고 : stringTest숫자 테스트를 통과하므로 빈 문자열이 아니어야합니다.


답변

이 기능을 여러 번 사용했습니다.

public static bool IsNumeric(object Expression)
{
    double retNum;

    bool isNum = Double.TryParse(Convert.ToString(Expression), System.Globalization.NumberStyles.Any, System.Globalization.NumberFormatInfo.InvariantInfo, out retNum);
    return isNum;
}

그러나 당신은 또한 사용할 수 있습니다;

bool b1 = Microsoft.VisualBasic.Information.IsNumeric("1"); //true
bool b2 = Microsoft.VisualBasic.Information.IsNumeric("1aa"); // false

에서 벤치마킹 ISNUMERIC 옵션

대체 텍스트
(출처 : aspalliance.com )

대체 텍스트
(출처 : aspalliance.com )


답변

아마도 C #에서 가장 좋은 옵션 일 것입니다.

문자열에 정수 (정수)가 포함되어 있는지 알고 싶은 경우 :

string someString;
// ...
int myInt;
bool isNumerical = int.TryParse(someString, out myInt);

TryParse 메소드는 문자열을 숫자 (정수)로 변환하려고 시도하며 성공하면 true를 리턴하고 해당 숫자를 myInt에 배치합니다. 그렇지 않으면 false를 반환합니다.

int.Parse(someString)다른 응답에 표시된 대안을 사용하는 솔루션 은 효과가 있지만 예외를 던지면 비용이 많이 들기 때문에 훨씬 느립니다. TryParse(...)버전 2의 C # 언어에 추가되었으며 그때까지는 선택의 여지가 없었습니다. 이제 당신은 : Parse()대안을 피해야합니다 .

소수를 허용하려면 소수 클래스에도 .TryParse(...)메소드가 있습니다. 위의 설명에서 int를 10 진수로 바꾸면 동일한 원칙이 적용됩니다.


답변

많은 데이터 유형에 대해 항상 내장 된 TryParse 메소드를 사용하여 해당 문자열이 전달되는지 확인할 수 있습니다.

예.

decimal myDec;
var Result = decimal.TryParse("123", out myDec);

결과는 다음과 같습니다 = True

decimal myDec;
var Result = decimal.TryParse("abc", out myDec);

결과는 다음과 같습니다 = False


답변

int.Parse 또는 double.Parse를 사용하지 않으려는 경우 다음과 같이 자신의 롤을 만들 수 있습니다.

public static class Extensions
{
    public static bool IsNumeric(this string s)
    {
        foreach (char c in s)
        {
            if (!char.IsDigit(c) && c != '.')
            {
                return false;
            }
        }

        return true;
    }
}