J'ai un formulaire Web .NET qui a un contrôle de téléchargement de fichier lié à un validateur d'expression régulière. Ce validateur doit valider que seuls certains types de fichiers doivent être autorisés pour le téléchargement (jpg, gif, doc, pdf)
L'expression régulière en cours qui fait cela est:
^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w].*))(.jpg|.JPG|.gif|.GIF|.doc|.DOC|.pdf|.PDF)$
Cependant, cela ne semble pas fonctionner ... Quelqu'un peut-il me donner un peu d'aide régulière?
Votre regex semble un peu trop complexe à mon avis. De plus, rappelez-vous que le point est un caractère spécial signifiant "n'importe quel caractère". Les expressions rationnelles suivantes devraient fonctionner (notez les points échappés):
^.*\.(jpg|JPG|gif|GIF|doc|DOC|pdf|PDF)$
Vous pouvez utiliser un outil tel que Expresso pour tester vos expressions régulières.
^.+\.(?:(?:[dD][oO][cC][xX]?)|(?:[pP][dD][fF]))$
Acceptera les fichiers .doc, .docx, .pdf ayant un nom de fichier d'au moins un caractère:
^ = beginning of string
.+ = at least one character (any character)
\. = dot ('.')
(?:pattern) = match the pattern without storing the match)
[dD] = any character in the set ('d' or 'D')
[xX]? = any character in the set or none
('x' may be missing so 'doc' or 'docx' are both accepted)
| = either the previous or the next pattern
$ = end of matched string
Attention! Sans inclure toute la chaîne d'extensions dans (? :), une extension comme .docpdf serait transmise.
Vous pouvez tester les expressions régulières à l'adresse http://www.regextester.com/
Cherchez-vous juste à vérifier que le fichier est d'une extension donnée? Vous pouvez simplifier ce que vous essayez de faire avec quelque chose comme ceci:
(.*?)\.(jpg|gif|doc|pdf)$
Ensuite, lorsque vous appelez IsMatch (), assurez-vous de passer RegexOptions.IgnoreCase en tant que deuxième paramètre. Il n'y a aucune raison de devoir lister les variations pour le boîtier.
Edit: comme Dario le mentionne, cela ne fonctionnera pas pour le RegularExpressionValidator, car il ne supporte pas les options de casing.
Vous pouvez intégrer l'insensibilité à la casse dans l'expression régulière de la manière suivante:
\.(?i:)(?:jpg|gif|doc|pdf)$
Vous pouvez utiliser ce modèle pour chaque type de fichier:
ValidationExpression="^.+\.(([pP][dD][fF])|([jJ][pP][gG])|([pP][nN][gG])))$"
par exemple, vous pouvez ajouter ([rR][aA][rR]
) pour le type de fichier Rar et etc ...
Votre expression rationnelle semble valider à la fois le nom du fichier et son extension. Est-ce ce dont vous avez besoin? Je suppose que c'est juste l'extension et utiliserait une expression rationnelle comme ceci:
\.(jpg|gif|doc|pdf)$
Et définissez la correspondance pour qu'elle soit insensible à la casse.