대상 인수 유형에 대해 C#의 복합 형식 문자열을 어떻게 검증합니까?

StackOverflow https://stackoverflow.com/questions/707163

  •  22-08-2019
  •  | 
  •  

문제

사용자가 제공하는 복합 형식 문자열이 주어졌습니다 ( String.Format) 및 복합 형식 문자열을 형식화하는 데 사용되는 인수를 나타내는 일련의 유형 세트는 사용자가 제공 한 값이 유효한지 어떻게 확인할 수 있습니까?

인수 자리 표시 자의 일반적인 구문이 일치하는지 확인하기 위해 정기적 인 표현을 만드는 것은 매우 쉬워야합니다. "{index[,alignment][:formatString]}"당 문서. 복합 형식 문자열의 자리 표시 자의 인덱스가 실제 타이핑 된 인수 수보다 작다는 것을 확인하는 것은 그리 어렵지 않습니다 (즉, 주어지지 않는 인수를 참조하지 않습니다). 그러나 전달 될 인수에 대한 유형을 감안할 때 알려져 있으므로:formatString"이러한 유형에 적합합니다.

예를 들어, 사용자를 확인하지 않으려 고합니다.{0:dddd MMMM}"첫 번째 인수 유형 (0 index)이 숫자 일 때 형식 문자열로String.Format("{0:dddd MMMM}", 1234) 수확량 "dddd MMMM")."의 수량 ":formatString"유형별 옵션입니다 너무 큰 모든 것을 수동으로 확인하려면. 다른 방법이 있습니까? 아니면 불량 형식 문자열을 잠재적으로 지정하는 사용자와 함께 살아야합니까?

관습이 없다고 가정합니다 IFormatProvider, ICustomFormatter 또는 IFormattable 여기에서 구현. .NET 프레임 워크에 이미 기본 유형 만 있습니다. 맞춤형 물건을 해결하기위한 보너스 포인트.

도움이 되었습니까?

해결책

이 작업을 수행하는 내장 방법은 없습니다.

모든 공동 케이스를 수동으로 코딩 할 수 있지만 권장하지 않습니다.

(편집하다) 하나의 실용적인 옵션 일 수 있습니다 try/catch - 사용자가 입력 할 때 가능한 한 빨리 형식을 테스트하십시오 ....

다른 팁

죄송하지만 방법은 다음과 같습니다.

try { string.Format(godKnowsWhat, aBunchOfArguments); }
catch(FormatException) { // use exception for control flow lol }

그래, 좀 나쁘다.

사용자가 지정한 잘못된 형식 문자열이 예외를 일으킬 수 있다면 시도해 볼 수 있습니까? 예, 순진하고 사소한 아이디어입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top