it-swarm.com.de

Überprüfen von Dateitypen mit regulären Ausdrücken

Ich besitze ein .NET-Webformular mit einem Steuerelement zum Hochladen von Dateien, das an einen Validator für reguläre Ausdrücke gebunden ist. Dieser Validator muss validieren, dass nur bestimmte Dateitypen zum Hochladen zugelassen werden sollen (jpg, gif, doc, pdf)

Der aktuelle reguläre Ausdruck, der dies ausführt, ist:


^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w].*))(.jpg|.JPG|.gif|.GIF|.doc|.DOC|.pdf|.PDF)$

Dies scheint jedoch nicht zu funktionieren ... kann mir jemand ein wenig ex-Hilfe geben?

67
mmattax

Dein Regex scheint meiner Meinung nach etwas zu komplex. Denken Sie auch daran, dass der Punkt ein Sonderzeichen ist, das "ein beliebiges Zeichen" bedeutet. Der folgende reguläre Ausdruck sollte funktionieren (beachten Sie die maskierten Punkte):

^.*\.(jpg|JPG|gif|GIF|doc|DOC|pdf|PDF)$

Sie können ein Tool wie Expresso verwenden, um Ihre regulären Ausdrücke zu testen.

149
Dario Solera
^.+\.(?:(?:[dD][oO][cC][xX]?)|(?:[pP][dD][fF]))$

Akzeptiert DOC-, DOCX- und PDF-Dateien mit einem Dateinamen von mindestens einem Zeichen:

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

Warnung! Ohne die gesamte Kette von Erweiterungen in (? :) einzuschließen, würde eine Erweiterung wie .docpdf übergeben.

Sie können reguläre Ausdrücke unter http://www.regextester.com/ testen

14
mdunka

Möchten Sie nur überprüfen, ob die Datei eine bestimmte Erweiterung aufweist? Sie können vereinfachen, was Sie mit so etwas versuchen:

(.*?)\.(jpg|gif|doc|pdf)$

Wenn Sie dann IsMatch () aufrufen, müssen Sie RegexOptions.IgnoreCase als zweiten Parameter übergeben. Es gibt keinen Grund, die Varianten für das Gehäuse aufzulisten.

Bearbeiten: Wie Dario erwähnt, wird dies für den RegularExpressionValidator nicht funktionieren, da keine Groß-/Kleinschreibung unterstützt wird.

14
Joseph Ferris

Sie können Groß- und Kleinschreibung wie folgt in den regulären Ausdruck einbetten:

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

Sie können diese Vorlage für jeden Dateityp verwenden:

ValidationExpression="^.+\.(([pP][dD][fF])|([jJ][pP][gG])|([pP][nN][gG])))$"

zum Beispiel: Sie können hinzufügen ([rR][aA][rR]) für Rar-Dateityp und etc ...

6
Sajjad mc

Ihr regulärer Ausdruck scheint sowohl den Dateinamen als auch die Erweiterung zu validieren. Brauchen Sie das? Ich gehe davon aus, dass es nur die Erweiterung ist und würde einen regulären Ausdruck wie diesen verwenden:

\.(jpg|gif|doc|pdf)$

Stellen Sie die Übereinstimmung so ein, dass die Groß- und Kleinschreibung nicht berücksichtigt wird.

5
PEZ