2013-05-17 3 views
0

최종 사용자가 잘못된 형식을 입력하거나 데이터를 입력하지 않고 필드를 떠날 때 예외를 catch하고 싶습니다. 첫 번째 이름과성에 문자열 형식을 사용했습니다. 문자열 형식은 문자열 형식 데이터와 숫자를 모두 받아들이므로 문제가됩니다. 데이터 캐치 블록은 잘못된 데이터 entry에 대한 예외를 catch 할 수 없습니다. 또한 문자열 유형 기본값이 null이므로 필드가 비어있는 경우 예외를 catch 할 수 없습니다.잘못된 데이터 입력에 대한 예외를 잡는 방법?

예를 들어, 사용자가 fname 필드에 123을 입력하거나 데이터를 입력하지 않고 필드를 떠날 때 예외를 catch하고 싶습니다.

 static void Main(string[] args) 
    { 
     string fName = null; 
     string lName = null; 

     try 
     {    

      Console.Write("Enter your first Name "); 
      fName = Console.ReadLine(); 

      Console.Write("Enter your Last Name "); 
      lName = Console.ReadLine(); 
     } 
     catch (Exception e) 
     { 
      Console.WriteLine(e.Message); 
      Console.WriteLine("Please enter correct format"); 
     } 

    } 
+1

예외를 잡으려면 던져 넣어야합니다 ... Console.ReadLine()은 사용자가 불만없이 던지는 모든 것을 취합니다 .. AFAIK. 당신은 * 데이터 유효성 검사를 찾고 있습니다 * 나는 생각하고 예외는 이것에 적당하지 않습니다. 봐봐! :) –

답변

1

정말 try-catch 블록이 필요하지 않습니다. 로컬 변수의 필드를 캡처 했으므로 유효성 검사를 수행 할 수 있습니다. "abc" 그대로

if (String.IsNullOrEmpty(fName)) { 
    // handle empty string input 
} 

if (ContainsNumbers(fName)) { 
    // handle invalid input 
} 

private bool ContainsNumbers(string str) { 
    ... 
} 
0

"123"만큼 유효한 문자열입니다. 무엇을하고 싶은지는 사용자가 입력 한 단어가 단어 문자 만 포함하고 있는지 확인하는 것입니다. 다음과 같이하면됩니다.

Regex regex = new Regex("(\w+)"); 
fname = Console.ReadLine(); 
if (!regex.Match(fname).Success) 
{ 
    // throw exception here, as the entered value did not contain word characters. 
} 
+0

input.Sorry 주셔서 감사합니다. 문자열 123이 아니라 숫자 123을 의미합니다. System.Text.RegularExpressions를 사용하여 Regex 클래스를 사용했지만 오류가 발생했습니다. –

0

수동으로 항목의 유효성을 검사 한 다음 예외를 throw해야합니다.

하지만 ... 당신이 정말로 데이터 검증을 위해 ... 뭔가가 발생한 예상하지 않을 때는 예외는 네트워크 오류, DB 오류 등처럼 .... 사용

을 데이터 유효성 검사에 대한 예외를 사용하지 말아야합니다 간단한 IF 문으로 충분합니다.

희망이 있습니다.

+2

불행히도, 나는 동의해야합니다. 예외는 예기치 않은 오류의 경우가 아니라 오류의 경우입니다. 당신이 정말로 말하고 동의해야하는 것은 당신이 흐름 제어를위한 예외를 사용하지 말아야한다는 것입니다. 따라서 작동 여부에 관계없이 무언가를 작성하는 경우 (이 경우 유효성 검사) 입력 된 데이터가 유효성 검사를 통과하지 못했음을 알리기 위해 예외를 사용할 수 없습니다. 간단히 말해 프로그램 오류가 아닙니다. –

+0

당신이 맞습니다 ... 나는 그렇게 말 했어야합니다. :) – Daniel