2013-01-24 1 views
0

이것은 간단해야하지만 여기 나와 함께하시기 바랍니다. 내가 간과하는 것은 무엇입니까? 내가하려고하는 모든 것은 SQL 쿼리의 일부인 값을 받아들이고 그 값으로 정수가 있는지 확인하려고합니다. 그렇다면 SQL Server로 전달되도록 허용합니다. Regex 메서드에 잘못된 인수가 있음을 알리는 알림이 표시됩니다. 내가 잘못한 부분을 밝혀 줘서 미리 감사드립니다.Regex correct implementation

string valid2Regex = @"\d{4}"; // regex to check for 4 integers 
Regex rgx = new Regex(valid2Regex); 
string idCheck = id; 

if (rgx.Matches(idCheck, rgx)) 
     { 
      parameters.Add(DataAccess.CreateParameter("@YEAR", SqlDbType.NVarChar, HttpContext.Request.QueryString.Get("Year"))); 
     } 

답변

2
^\d{4}$ 

이것은 단지 4 자리 숫자로 제한합니다. 그렇지 않으면 문자열 내에서 4 자리 숫자가 함께 작동합니다.

또한, there is no instance overload which takes those 2 parameters가 대신 IsMatch 사용 : 당신이 표현 보는이 경우

string match = rgx.Match(idCheck); 

을 단일 기대 : 구문에 대해 이야기

if (rgx.IsMatch(idCheck)) 
{ 
    ... 
+0

@sixlettervariables 좋은 캐치 & 감사합니다. – OmegaMan

+0

그냥 그곳에 던져 버릴 줄 알았는데 [4.5에도 없다] (http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex.matches.aspx) – Jeff

+0

좋은 점은! 지금 조정되었지만 이것이 VS에서 빨간색 밑줄을 따라 가고있는 것입니다. "REGEX"에 대한 최상의 오버로드 된 메서드에는 잘못된 인수가 있습니다. 이 예제는 Matches (string, int)를 보여줍니다. 다른 것을 조정해야합니까? – Working

0

을, 당신은 다른 방법으로 정규식을 사용할 수 있습니다 결과, 예 :

expr:"\d{4}" text:"asdfas1234asdfasd" -> "1234" 
expr:"\d{4}" text:"1234"    -> "1234" 
expr:"^\d{4}$" text:"asdfas1234asdfasd" -> null 
expr:"^\d{4}$" text:"1234"    -> "1234" 

문자열이 일치하는 경우 CK 당신은 사용할 수 있습니다을 MatchCollection

expr:"\d{4}" text:"asdfas1234asdfasd" -> true 
expr:"\d{4}" text:"1234"    -> true 
expr:"^\d{4}$" text:"asdfas1234asdfasd" -> false 
expr:"^\d{4}$" text:"1234"    -> true 
코드에서 방법 (일치)를 사용

여러 인스턴스를 찾아 반환 :

MatchCollection result = rgx.Matches(idCheck, 0); 
를 같은 작품을

bool found = rgx.IsMatch(idCheck); 

아마도 두 번째 매개 변수에 관한 오류는 MSDN에 따라 정수이며 문자열의 시작 위치를 나타냅니다.