2011-02-17 3 views
5

.NET에서 주어진 문자열이 숫자인지 확인하는 방법은 무엇입니까?.NET에서 문자열이 숫자인지 확인하는 방법은 무엇입니까?

TEST1은 - 문자열

1232입니다 -입니다 수

테스트 - 문자열에게 있습니다

tes3t은 -이다 문자열

4567 - - 문자열

2323k입니다 수

입니다

시스템 기능을 사용하여 어떻게 할 수 있습니까?

+3

무엇 1.12''에 대해?'.12'? ,'-32'? 숫자를 정의하십시오 : –

+1

'return str.All (Char.IsDigit); ' – Mohsen

답변

4

ontputInt 값이 0 인 경우 int.TryParse (inputString, out outputInt)를 사용하면 숫자가 아닙니다.

+1

Int32.TryParse는 구문 분석 된 값을 가진 bool plus out 매개 변수를 리턴합니다 (작동하지 않으면 기본값). bool 결과를 확인하여 다른 것이 효과가 있는지 확인하십시오. "0"이 거부됩니다. –

0

길이가 지정되지 않은 경우 문자가 맞는지 여부를 확인하려면 문자 비교로 오래된 문자를 사용해야합니다.

당신이 비트의 고정 된 수의 정수가 될 것으로 예상하는 경우

는 32 비트 정수,

은 다음 Int32.TryParse 뭔가를 시도 할 수 있습니다 말한다.

32

각 문자를 테스트하는 간단한 루프를 작성할 수 있습니다.

bool IsNumber(string s) 
{ 
    foreach (char c in s) 
    { 
     if (!Char.IsDigit(c)) 
      return false; 
    } 
    return s.Any(); 
} 

또는 LINQ를 사용할 수 있습니다. 당신이 문자열은 모든 문자가 숫자 것을있는 것보다 int 형식으로 표현 될 수있는 경우에 더 관심이 있다면

bool IsNumber(string s) 
{ 
    return s.Any() && s.All(c => Char.IsDigit(c)); 
} 

, 당신은 int.TryParse()를 사용할 수 있습니다.

bool IsNumber(string s) 
{ 
    int i; 
    return int.TryParse(s, out i); 
} 

참고 : 당신은 사람들이 당신을 줄 몇 가지 답변을 받아 시작되지 않는 경우 당신은 많은 도움을받지 않습니다.

+0

왜 각 문자가 숫자인지 아닌지를 확인하고 싶습니까? – V4Vendetta

+0

@ V4Vendette 원래 질문을 살펴보면, 숫자로 간주되는 유일한 경우는 * 모든 숫자가 숫자 인 경우입니다. 그러면 어떻게 모든 숫자를 확인하지 않고 이것을 결정할 수 있습니까? –

13

모든 문자가 숫자가 (뿐만 아니라 음의 정수에 대한 true가됩니다)

inputString.All(c => IsDigit(c)); 

또한 당신은 시도 Int32.TryParse 또는 Int64.TryParse을 사용할 수 있습니다

string pattern = "^[-+]?[0-9]*\.?[0-9]*$"; 
Regex.IsMatch(inputString, pattern) 
+2

+1 : 멋진 혁신 :) – naveen

+0

나는 이것을 좋아한다. 방금 bool이 필요할 때 항상 out 변수를 사용하도록 도청했습니다. 이것은 나를 위해 다음 코드로 변환 : if (productId.All (Char.IsDigit)). 나는 이태리의 우아함을 좋아한다. –

+0

'inputString'이 비어 있으면 첫번째 예제는 실패합니다. –

1

정규 표현식을 시도 할 경우이 확인됩니다 문자열을 숫자로 변환합니다.

그렇지 않으면, 당신은뿐만 아니라 코드를 다음을 사용 :이 같은

public Boolean IsNumber(String s) 
{ 
    foreach (Char ch in s) 
    { 
     if (!Char.IsDigit(ch)) return false; 
    } 
    return true; 
} 
1

사용 int.TryParse을.

var test = "qwe"; 
int result; 
if(int.TryParse(test, out result)) 
{ 
    //if test is int you can access it here in result; 
} 
0

당신은 여기에 원래 문제의 문자열에 대한 일련의 테스트입니다

int parsed; 
if(int.TryParse("is it a number?", out parsed)) 

사용할 수 있습니다. 숫자 스타일과 문화를 알리는 능력을 가진 오버로드를 사용합니다.

[Test] 
    public void FalseOnStringyString() 
    { 
     var sources = new []{"test1", "test", "tes3t", "2323k"}; 

     foreach (var source in sources) 
     { 
      int parsed; 
      Assert.IsFalse(int.TryParse(source, NumberStyles.Any, CultureInfo.InvariantCulture, out parsed)); 
     } 
    } 

    [Test] 
    public void TrueOnNumberyString() 
    { 
     var sources = new[] { "1232", "4567" }; 

     foreach (var source in sources) 
     { 
      int parsed; 
      Assert.IsTrue(int.TryParse(source, NumberStyles.Any, CultureInfo.InvariantCulture, out parsed)); 
     } 
    } 

또 다른 해결책은 Regex를 사용하는 것입니다. 그러나이 경우 메서드는 숫자를 출력하지 않습니다.

[Test] 
    public void TrueOnNumberyStringRegex() 
    { 
     var sources = new[] { "1232", "4567" }; 

     var isNumber = new Regex(@"^\d+$"); 

     foreach (var source in sources) 
     { 
      Assert.IsTrue(isNumber.IsMatch(source)); 
     } 
    } 

    [Test] 
    public void FalseOnNumberyStringRegex() 
    { 
     var sources = new[] { "test1", "test", "tes3t", "2323k" }; 

     var isNumber = new Regex(@"^\d+$"); 

     foreach (var source in sources) 
     { 
      Assert.IsFalse(isNumber.IsMatch(source)); 
     } 
    } 
1

문자열의 확장 방법과 동일합니다. 이 특별한 가치에 대해 "123.56"응답은 현재의 문화에 달려 있습니다. 여기

class Program 
    { 
     static void Main(string[] args) 
     { 
      string[] Values = {"123", "someword", "12yu", "123.56" }; 
      foreach(string val in Values) 
       Console.WriteLine(string.Format("'{0}' - Is number?: {1}",val, val.IsNumber())); 
     } 
    } 


    public static class StringExtension 
    {   
     public static bool IsNumber(this String str) 
     { 
      double Number; 
      if (double.TryParse(str, out Number)) return true; 
      return false;    
     } 
    } 
+0

int 대 더블 파싱의 경우에는 항상 좋은 사례가 있습니다. 그럼 당신은 독립적 인 문화 구체의 라인을 내려야 만합니다 (.NET에서 많은 것을하지는 않았지만 자바에서는 많은 것을했습니다) – Andez

0
//public static bool IsAlphaNumeric(string inputString) 
    //{ 
    // bool alpha = false; 
    // bool num = false; 
    // int l; 
    // try 
    // { 
    //  foreach (char s in inputString) 
    //  { 
    //   if (!char.IsDigit(s)) 
    //   { 
    //    alpha = true; 

    //   } 
    //   else 
    //   { 
    //    num = true; 
    //   } 


    //  } 
    //  if (num == true && alpha == true) 
    //  { 
    //   return true; 
    //  } 
    //  else 
    //  { 
    //   return false; 
    //  } 

    // } 
    // catch 
    // { 
    //  return false; 
    // } 

    //} 
1

우리가 간다 : 다음을 사용하여 호출 할 때

public static class StringExtensions 
    { 
     public static bool IsDigits(this string input) 
     { 
      return input.All(c => !c.IsDigit()); 
     } 

     public static bool IsDigit(this char input) 
     { 
      return (input < '0' || input > '9'); 
     } 

    } 

은, 그것이 사실 반환해야합니다 :

var justAString = "3131445"; 

var result = justAString.IsDigits(); 
관련 문제