Frage

Ich habe in den Einstellungen eine Reihe aller Dateitypen-Datei ich zulassen mag:

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

Ich möchte neben dem Fileupload haben RegularExpressionValidator zu steuern, die nur diese Dateien ermöglicht.

Ich bin in der Pageload Ereignisbehandlung der Validation Eigenschaft des regex Validator Einstellung.

Ich habe versucht:

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

Aber es ist Groß- und Kleinschreibung. Mein einziges Problem jetzt ist es unempfindlich zu machen.

War es hilfreich?

Lösung

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

Andere Tipps

Wenn Sie Client-Seite validion deaktivieren und nur serverseitige Validierung verwenden, gibt es eine .NET-Support-Fall insensitivte operatior (? I), die verwendet werden können. Wenn Sie somethign möchten, die sowohl Client- als auch Server-Seite funktioniert müssen Sie eventuell etwas greifen, wie

[Jj] [pp] [Ee] [Gg]

für jede Ihrer Dateierweiterungen. Haben Sie nicht Code für jede Ihrer Erweiterungen enthalten, sollte ziemlich einfach sein, um das Muster extrapolieren

Antwort:

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

Das heißt:

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

Dies sollte eine sehr effiziente Möglichkeit, um Dateien gegen eine dynamische veränderbare Liste

Validieren

FYI, ich habe es mit diesem Online-regex-Builder, ein erstaunliches kostenloses Tool!

Die Regex funktioniert gut mit dem RegularExpressionValidator auf der Server-Seite. Das Problem steigt, wenn es versucht, die Client-Validierung zu tun, die fehlschlägt, weil die Javascript regex Geschmack nicht wissen, wie zu behandeln? „I“ (Groß- und Kleinschreibung ist in Javascript regex mit „i“ erreicht). Sie können durch das Hinzufügen dieses Skripts, um Ihre Seiten dieses Problem zu lösen. Ich denke, das Skript ziemlich geradlinig ist.

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

Wenn Sie diese Validierungsserver-Seite mit .NET tun, können Sie so etwas wie

verwenden

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")
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top