문제

설정 파일에 허용하려는 모든 파일 유형의 행이 있습니다.

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

FileUpload 컨트롤 옆에 이러한 파일 만 허용하는 regularexpressionvalidator를 제어하고 싶습니다.

Regex Validator의 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 +")$";
    }
}

그러나 그것은 사례에 민감합니다. 내 유일한 문제는 지금 그것을 무감각하게 만드는 것입니다.

도움이 되었습니까?

해결책

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 +")$";
    }
}

다른 팁

클라이언트 측 유효성 검사를 끄고 서버 측 유효성 검사 만 사용하면 사용할 수있는 .NET 지원 사례 insensitivte Operatior (? i)가 있습니다. 클라이언트와 서버 측면에서 작동하는 Somethign을 원한다면 같은 것에 의지해야 할 수도 있습니다.

jj] [pp] [ee] [gg

각 파일 확장자에 대해 각 확장에 대한 코드를 포함하지 않았으므로 패턴을 외삽하기가 매우 쉽습니다.

대답:

^.*\.(?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);

동적 변경 가능한 목록에 대해 파일을 검증하는 매우 효율적인 방법이어야합니다.

참고, 나는 그것을 만들었다 이것 온라인 Regex Builder, 놀라운 무료 도구!

Regex는 서버 측의 Regularexpressionvalidator에서 잘 작동합니다. 클라이언트 유효성 검사를 시도하면 문제가 발생합니다. JavaScript Regex Flavor가 "I"를 처리하는 방법을 모르기 때문에 실패합니다 ( "I"와 함께 JavaScript Regex에서 사례 무감각이 달성됩니다). 이 스크립트를 페이지에 추가 하여이 문제를 해결할 수 있습니다. 스크립트가 매우 간단하다고 생각합니다.

   <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>

.NET을 사용 하여이 유효성 검사 서버 측을 수행하는 경우

VB :

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

씨#:

    var re = new Regex("(jpg)|(gif)", RegexOptions.IgnoreCase);
    re.IsMatch("image.jpg")
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top