2011-05-06 8 views
3

입력이 int인지 아닌지 확인해야합니다. Int.isWholeNumber() 함수와 같이 String.IsNullOrEmpty()와 비슷한 기능이 있습니까?Int.isWholeNumber() 함수 또는 이와 유사한 것이 있습니까?

전에 int를 선언 할 필요없이 if() 문 안에서만 유효성을 검사 할 수 있습니까?

EDIT (당신은 TryParse()와 함께 할 필요에 따라)
나는 지역 번호 (다섯 개 번호) 나는 BCL 내에서 그러한 방법이있다 생각하지 않는다

+0

정수로 무엇을 의미합니까? 비영어권? – Aliostad

+0

int를 선언하기 전에 어떤 문제가 있습니까? 물론 숫자만으로 입력을 검증하기 위해 regexp를 작성할 수는 있지만 int.TryParse보다 비싸다고 생각합니다. – VikciaR

+0

입력이 문자열입니까? –

답변

10

를 확인해야하지만 그건 쉬운 (난 당신이 정말 문자열이 정수로 구문 분석 할 수 있는지에 대해 얘기하고 있으리라 믿고있어) 쓰기 :

public static bool CanParse(string text) 
{ 
    int ignored; 
    return int.TryParse(text, out ignored); 
} 

은 당신이 그들을 필요로 등을 IFormatProvider 값을 받아들이는 오버로드를 추가합니다. 이것은 유효성 검사를위한 것으로 가정하면 유효한 값의 범위가 지정 될 수 있도록 확장 할 수도 있습니다 ...

많은 유효성 검사를 수행하는 경우 Fluent Validation 프로젝트.

+4

연예인 방문. 나는 솔루션으로 문제를 일으킬 수있는 것으로 표시하지 않는 것 같아요 =) – Niklas

0

정수형은 정수로 정의되어야합니다. 비 - 정수가되도록 double, float 또는 decimal 형식이어야합니다. 항상 입력 유형을 테스트 해 볼 수 있습니다.

입력이 문자열일까요? 입력이 문자열이면 '.'을 검색 할 수 있습니다. 또는 ','문자 (문화에 따라 다름). 또는 정수로 파싱 해 볼 수도 있습니다.

1

사용 Int.TryParse 또는 사용자 지정 기능을 만드십시오.

function bool IsNumber(object number) 
{ 
    try 
    { 
    Convert.ToInt32(number.ToString()); 
    return true; 
    } 
    catch 
    { 
    return false; 
    } 
} 
+1

텍스트가 숫자가 아닌 경우 예외가 발생하면 'int.Parse'를 호출하여 시작할 수 있습니다. ... (나는 또한 OP가 "전에 int를 선언 할 필요가 없다"라고 말한 질문을 놓쳤다 고 생각합니다.) –

2

당신은 확장 방법으로이를 달성 할 수

을 당신은 여기

bool isNumber = "-1990".IsNumber(); 

를 사용하는 코드입니다 :

public static class NumberStringExtension 
{ 

    public static bool IsNumber(this string value) 
    { 
     int i = 0; 
     return int.TryParse(value, out i)); 
    } 

} 
+0

선언 다음에 모든 것을 쓸 수 있습니다 :'return int.TryParse (value , out i) && i> = 0;'. 당신이보기보다 더 많든 적든간에 긴 형식보다 읽기 쉬운 것은 개인적인 취향이다 : –

+0

나는 확장 방법에 집착한다. 나는 저항 할 수 없다. : – Aliostad

+0

확장 방법이 작동하지만 왜 "IsNonNegative" WholeNumberString "? – JMcCarty

1

int.TryParse 당신에게 답변을 제공합니다 있는지 확인하고, 입력 문자열에 소수점이 없는지 확인하십시오. (사람이 입력으로 "1"을 입력하면 이렇게하면 가양 성을 제공 할 것입니다.)

string input; 
int ignored; 

bool wholeNumber = int.TryParse(input, out ignored) && input.indexOf('.') == -1; 
-2

을 그냥 if 문에서 유효성을 검사하려면 그냥 때문에

If (val % 1 > 0) 
    //not whole number 
+0

사용자의 질문에 대답하지 않습니다. 이것은 사용자가 입력 한 값이 숫자조차 아닌지 확인합니다. –

+0

@Ramhound 사용 된 입력의 유형이 실제로 명시된 적이 없습니다. 필자의 가정은 입력이 숫자 형식이라는 것입니다. 입력이 숫자 형식 인 경우 실제로 요청한대로 작동합니다. – JMcCarty

0

을 할 수 모든 INT는 정수이며,이 쉽습니다 :

내가 실제 문제가 귀하의 의견에서 수집
public static bool IsWholeNumber(int i) 
{ 
    return true; 
} 
+1

이것은 내가 본 중에 최악의 기능입니다. 이것은 그가하고 싶은 일에 가깝지 않습니다. –

12

는 "어떻게이 문자열이 유효한 스웨덴어 우편 번호가 포함되어있는 경우 결정합니까?" 스웨덴 우편 번호는 0으로 시작하지 않는 다섯 자리 숫자입니다. 그게 실제로 해결해야하는 문제라면 이 문제를 해결합니다.

  • 다섯 자 문자열은 다음과 같습니다 오히려 문자열을 정수로 변환하고 정수, 나는 단순히 말할 수표를 것을 확인하는 것보다? 그렇지 않은 경우 거부하십시오.
  • 은 1, 2, 3, 4, 5, 6, 7, 8 또는 9 문자열의 첫 번째 문자입니까? 그렇지 않은 경우 거부하십시오.
  • 은 문자열 0, 1, 2, 3, 4, 5, 6, 7, 8 또는 9의 두 번째, 세 번째, 그렇지 않은 경우 거부하십시오.

간단합니다. 만약 당신이 수학을 결코하지 않으려한다면, 그것을 정수로 변환하지 마십시오.

이 접근법은 더 복잡한 형태로 일반화됩니다. 스웨덴 우편 번호는 "SE-12 345"라는 접두사가 붙은 형태로 쓰여지며 두 자리와 세 자리 사이에 공백이 붙습니다. 이 형식을 다루는 정수 검증 루틴을 작성하는 것은 대단히 어렵지만 문자열 검증 루틴을 작성하는 것은 간단합니다.

보다 일반적으로 이것은 질문을 작성하기위한 좋은 조언을 보여줍니다. 실제로 해결해야하는 문제에 대해 질문하십시오. 문자열을 정수로 구문 분석 한 솔루션을 가정 한 다음 가정 한 솔루션에 대한 질문을하기 시작했습니다. 이는 자동적으로 누군가가 귀하의 실제 문제와 관련된 조언을하지 못하게합니다. 어쩌면 이것을 읽는 누군가는 이미 우편 번호 확인 소프트웨어 라이브러리를 개발했다. 그들이 가지고 있다면, 그들은 원래의 질문에서 그것에 대해 당신을 말할 줄 몰랐어.

+0

현명한 사람으로 도말하지 않고 어떻게 말합니까? 내 질문은 지역 번호의 유효성 검사에서 비롯되었지만 내 실제 질문은 그와 관련이 없습니다. 한 줄의 코드에서 int의 유효성을 검사하는 방법을 알고 싶었습니다.DB는 길이 5의 정수만 사용합니다 (나는 디자인하지 않았으며 다시 디자인하지 않습니다). 존의 대답은 정확하고 요점입니다. 나는 당신의 대답과 당신의 노력에 감사하지 않습니다! – Niklas

관련 문제