web-dev-qa-db-fra.com

Validation des types de fichiers par expression régulière

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?

67
mmattax

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.

149
Dario Solera
^.+\.(?:(?:[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/

14
mdunka

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.

14
Joseph Ferris

Vous pouvez intégrer l'insensibilité à la casse dans l'expression régulière de la manière suivante:

\.(?i:)(?:jpg|gif|doc|pdf)$
11
ICR

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

6
Sajjad mc

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.

5
PEZ