Question

J'ai dans le fichier de paramètres d'une rangée de tous les types de fichiers que je veux permettre à:

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

Je veux avoir à côté du contrôle FileUpload un RegularExpressionValidator qui permet uniquement ces fichiers.

Je traitais en cas PageLoad définissant la propriété ValidationExpression du validateur regex.

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 est maintenant de le rendre insensible.

Était-ce utile?

La solution

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

Autres conseils

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 côté client et serveur, vous devrez peut-être recourir à quelque chose comme

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

pour chacun de vos extensions de fichier. Prévoiraient pas de code pour chacun de vos extensions, devrait être assez facile d'extrapoler le modèle

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 la validation des fichiers à une liste modifiable dynamique

Pour votre information, je l'ai fait avec ce constructeur en ligne regex, un outil gratuit étonnant!

Le regex fonctionne très bien avec le RegularExpressionValidator sur le côté serveur. Le problème se lève quand il essaie de faire la validation du client, qui échoue parce que le javascript saveur regex ne sait pas comment gérer « ? I » (la casse est réalisé en 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>

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")
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top