Domanda

Non ho nelle impostazioni di file di una fila di tutti i tipi di file che voglio permettere:

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

Io voglio avere accanto al FileUpload controllare un RegularExpressionValidator che consente solo di questi file.

sto gestirlo nel impostando la proprietà ValidationExpression del validatore regex evento PageLoad.

ho provato:

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

Ma è case sensitive. Il mio unico problema ora è quello di rendere insensibile.

È stato utile?

Soluzione

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

Altri suggerimenti

Se si spegne validion lato client e utilizzare solo la validazione lato server, c'è un caso insensitivte supporto .NET operatior (? I) che può essere utilizzato. Se si vuole somethign che funziona sia lato client e server potrebbe essere necessario ricorrere a qualcosa di simile

[Jj] [PP] [ee] [Gg]

per ciascuna delle vostre estensioni dei file. Non includere il codice per ciascuna delle vostre estensioni, dovrebbe essere abbastanza facile estrapolare il modello

Risposta:

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

Il che significa:

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

Questo dovrebbe essere un modo molto efficace per convalidare i file con un elenco mutevole dinamica

Cordiali saluti, ho fatto con questo costruttore regex online, un incredibile strumento gratuito!

L'espressione regolare funziona bene con il RegularExpressionValidator sul lato server. Il problema sorge quando si cerca di fare la convalida del client, che non riesce perché il sapore regex javascript non sa come gestire "? I" (caso insensibilità è realizzato in javascript regex con "i"). È possibile risolvere questo problema con l'aggiunta di questo script alle tue pagine. Penso che lo script è piuttosto semplice.

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

Se si sta facendo questo lato server di validazione con .NET, è possibile usare qualcosa come

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")
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top