web-dev-qa-db-ja.com

正規表現によるファイルタイプの検証

正規表現バリデーターに関連付けられているファイルアップロードコントロールを持つ.NET Webフォームがあります。このバリデーターは、アップロードに特定のファイルタイプのみを許可する必要があることを検証する必要があります(jpg、gif、doc、pdf)

これを行う現在の正規表現は次のとおりです。


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

しかし、これは機能していないようです...誰でも私に少しの正規の助けを与えることができますか?

67
mmattax

私の意見では、正規表現は少し複雑すぎるようです。また、ドットは「任意の文字」を意味する特殊文字であることを忘れないでください。次の正規表現が機能するはずです(エスケープされたドットに注意してください)。

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

Expresso のようなツールを使用して、正規表現をテストできます。

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

少なくとも1文字のファイル名を持つ.doc、.docx、.pdfファイルを受け入れます。

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

警告!拡張機能のチェーン全体を(?:)で囲まなければ、.docpdfのような拡張機能はパスします。

http://www.regextester.com/ で正規表現をテストできます

14
mdunka

ファイルが特定の拡張子であることを確認するだけですか?次のようなことで、しようとしていることを単純化できます。

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

次に、IsMatch()を呼び出すときは、必ずRegexOptions.IgnoreCaseを2番目のパラメーターとして渡してください。ケーシングのバリエーションをリストアップする必要はありません。

編集:Darioが言及しているように、これはRegularExpressionValidatorでは機能しません。ケーシングオプションをサポートしていないためです。

14
Joseph Ferris

次のように、大文字と小文字の区別を正規表現に埋め込むことができます。

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

このテンプレートは、すべてのファイルタイプに使用できます。

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

例:([rR][aA][rR])Rarファイルの種類など...

6
Sajjad mc

正規表現は、ファイル名と拡張子の両方を検証しているようです。それはあなたが必要なものですか?私はそれが単なる拡張子であり、次のような正規表現を使用すると仮定します:

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

そして、大文字と小文字を区別しないように一致を設定します。

5
PEZ