2009-07-28 3 views
0

설정 파일에 허용하려는 모든 파일 형식의 행이 있습니다.asp : UploadFile 파일 이름을 RegularExpressionValidator로 확인하는 데 문제가 있습니다.

jpeg|jpg|tiff|tif|png|gif|bmp|eps|wmf|emf|pdf|doc|docx|zip|rar|ppt|pptx|mdb|xls 

FileUpload 컨트롤 옆에이 파일 만 허용하는 RegularExpressionValidator가 있어야합니다.

정규식 유효성 검사기의 ValidationExpression 속성을 설정하는 PageLoad 이벤트에서 처리하고 있습니다.

시도 :

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     string regex = "jpeg|jpg|tiff"; //A huge list of filetypes. 
     upFiles_RegularExpressionValidator.ValidationExpression = 
      @"^.*\.(" + regex +")$"; 
    } 
} 

하지만 대소 문자를 구분합니다. 내 유일한 문제는 이제 그것을 구분하지 않는 것입니다.

답변

0
protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     string regex = "([jJ][pP][eE][gG])|([jJ][pP][gG])|([tT][iI][fF][fF])"; //A huge list of filetypes. 
     upFiles_RegularExpressionValidator.ValidationExpression = 
      @"^.*\.(" + regex +")$"; 
    } 
} 
0

가하는 .NET 지원 사례 insensitivte가 operatior (? I) 사용할 수. 당신은 당신이 당신의 파일 확장명 각각에 대해

[JJ] [PP] [Ee로] [GG]

처럼 뭔가에 의지해야 클라이언트와 서버 측 모두 작동 somethign을합니다. 당신의 확장의 각 코드를 포함하지 않았나요, 패턴을 추정 꽤 쉽게해야

+0

이 yuo 수 설명해주십시오 이 두 옵션의 차이점은 무엇입니까? – Shimmy

+0

및 그 사용법 – Shimmy

+0

대/소문자를 구분하지 않는 연산자 - (i?)는 .NET 표준 연산자이며 표준 정규식 구문의 일부가 아닙니다. 클라이언트 측 유효성 검사기는 JavaScipt를 사용하므로이 연산자는 클라이언트 측에서 작동하지 않습니다. 서버 측 유효성 검사 만 사용하는 것이 좋으면 클라이언트 측 유효성 검사를 비활성화하고 운영자를 사용하십시오. 번째 옵션은 의사당 또는 소문자 P이어서 각 확장 Capitor 또는 소문자 J 의사당 또는 소문자 g 대괄호 [] 정의 문자 세트 하였다 의사당 또는 소문자 E 하였다 들면 말하는 equivelant이다. –

0

답변 :

^.*\.(?i-s:pdf|exe)$ 

의미

ValidationExpression = @"^.*\.(?i-s:pdf|exe)$"; //will match pdf PDF exe EXE 

string regex = "jpeg|jpg|tiff|tif|png|gif|bmp|eps"; 
ValidationExpression = @"^.*\.(?i-s:file_types)$".Replace("file_types", regex); 

이에 매우 효율적인 방법이 될한다 동적 변경 가능 목록에 대해 파일 유효성 검사

참고로, 나는 this 온라인 정규식 작성기, 놀라운 무료 도구로 만들었습니다!

+0

클라이언트 쪽에서도 작동합니까? –

+0

오우! 난 그냥 테스트 해봤는데 그렇지 않아! – Shimmy

+0

아쉽네! 그것은 유효한 정규식이지만, 그것은 ASP에서 작동하지 않습니다 : RegularExpressionValidator! 이 컨트롤 대/소문자를 구분하지 않는 방법이 있습니까? – Shimmy

0

정규식은 서버 측의 RegularExpressionValidator와 잘 작동합니다. 자바 스크립트 정규식의 풍미가 "? i"(대문자와 무관 한 것은 "i"를 사용하는 자바 스크립트 정규식에서 성취 됨)를 처리하는 방법을 모르기 때문에 실패하는 클라이언트 유효성 검사를 할 때 문제가 발생합니다. 이 스크립트를 페이지에 추가하여이 문제를 해결할 수 있습니다. 나는이 스크립트가 꽤 솔직하다고 생각한다. 당신은 .NET이 검증 서버 측을 수행하는 경우

<script type="text/javascript" language="javascript"> 
     function RegularExpressionValidatorEvaluateIsValid(val) 
     { 
      var value = ValidatorGetValue(val.controltovalidate); 
      if (ValidatorTrim(value).length == 0) 
      return true; 

      var regex = null; 
      if(val.validationexpression.indexOf("(?i)")>=0) 
      { 
      regex = new RegExp(val.validationexpression.replace("(?i)",""),"i"); 
      } 
      else 
      { 
      regex = new RegExp(val.validationexpression); 
      } 

      var matches = regex.exec(value); 

      return (matches != null && value == matches[0]); 
     } 
    </script> 
0

, 당신은

VB 같은 것을 사용할 수 있습니다

Dim re As New Regex("(jpg)|(gif)", RegexOptions.IgnoreCase) 
    re.IsMatch("image.jpg") 

C 번호 :

var re = new Regex("(jpg)|(gif)", RegexOptions.IgnoreCase); 
    re.IsMatch("image.jpg") 
+0

ASP.NET RegularExpressionValidator 컨트롤을 사용하여 유효성을 검사 할 방법을 찾고있었습니다. – Shimmy

관련 문제