2009-07-28 19 views
0

j'ai dans le fichier de paramètres d'une rangée de tous les types de fichiers que je veux permettre:Problème validation asp: Les noms de fichiers UploadFile avec RegularExpressionValidator

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

que je veux avoir à côté contrôler la FileUpload un RegularExpressionValidator qui permet seulement ces fichiers.

Je le gère dans l'événement PageLoad en définissant la propriété ValidationExpression du validateur d'expressions régulières.

i essayé:

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

Mais il est sensible à la casse. Mon seul problème maintenant est de le rendre insensible.

Répondre

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

Si vous désactivez validion côté client et utiliser uniquement la validation côté serveur, il y a un cas prise en charge .NET insensitivte operatior (? I) qui peut être utilisé. Si vous voulez somethign qui fonctionne à la fois client et côté serveur, vous devrez peut-être recourir à quelque chose

[Jj] [Pp] [Ee] [Gg]

pour chacun de vos extensions de fichier. N'a pas inclure le code pour chacun de vos extensions, devrait être assez facile d'extrapoler le modèle

+0

Peut-YUO s'il vous plaît expliquer les différences entre ces deux options? – Shimmy

+0

Et comment les utiliser – Shimmy

+0

L'opérateur insensible à la casse - (i?) Est un opérateur .NET spécifique et ne fait pas partie de la syntaxe d'expression régulière standard. Les validateurs côté client utilisent JavaScipt, cet opérateur ne fonctionne donc pas du côté client. Si vous utilisez uniquement la validation côté serveur, désactivez la validation côté client et utilisez l'opérateur. La seconde option équivaut à dire, pour chaque extension Capitor ou minuscule j suivi de majuscule p ou minuscule suivi de majuscule ou minuscule e suivi de majuscule ou minuscule g les parenthèses [] définissent un jeu de caractères. –

0

Réponse:

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

Ce qui signifie:

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

Cela devrait être un moyen très efficace de valider des fichiers par rapport à une liste modifiable dynamique

FYI, je l'ai fait avec this constructeur de regex en ligne, un outil gratuit incroyable!

+0

Cela fonctionne-t-il également du côté client? –

+0

aïe! je viens de le tester et ce n'est pas le cas! – Shimmy

+0

Aïe !! C'est une regex valide, mais cela ne fonctionne pas dans l'asp: RegularExpressionValidator! Existe-t-il un moyen de rendre insensible l'expression rationnelle de ce cas de contrôle? – Shimmy

0

L'expression régulière fonctionne correctement avec le RegularExpressionValidator côté serveur. Le problème augmente quand il essaye de faire la validation du client, qui échoue parce que la saveur de regex de javascript ne sait pas manipuler "? I" (l'insensibilité de cas est accomplie dans javascript regex avec "i"). Vous pouvez résoudre ce problème en ajoutant ce script à vos pages. Je pense que le script est assez simple.

<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

Si vous faites ce côté serveur de validation avec .NET, vous pouvez utiliser quelque chose comme

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

Je cherchais un moyen de valider avec le contrôle ASP.NET RegularExpressionValidator. – Shimmy