Проверка типов файлов с помощью регулярного выражения
У меня есть веб-форма .NET, которая имеет элемент управления загрузкой файлов, привязанный к валидатору регулярных выражений. Этот валидатор должен подтвердить,что для загрузки должны быть разрешены только определенные типы файлов (jpg,gif,doc, pdf)
текущее регулярное выражение, которое делает это:
^(([a-zA-Z]:)|({2}w+)$?)((w[w].*))(.jpg|.JPG|.gif|.GIF|.doc|.DOC|.pdf|.PDF)$
однако это, кажется, не работает...Может ли кто-нибудь дать мне небольшую помощь reg ex?
спасибо.
6 ответов:
регулярное выражение кажется слишком сложным, на мой взгляд. Кроме того, помните, что точка-это специальный символ, означающий "любой символ". Должно работать следующее регулярное выражение (обратите внимание на экранированные точки):
^.*\.(jpg|JPG|gif|GIF|doc|DOC|pdf|PDF)$
вы можете использовать такой инструмент, как экспрессо чтобы проверить свои регулярные выражения.
вы просто хотите проверить, что файл имеет данное расширение? Можно упростить то, что вы пытаетесь сделать что-то вроде этого:
(.*?)\.(jpg|gif|doc|pdf)$
затем, когда вы вызываете IsMatch () убедитесь, что прошли регулярные выражения.IgnoreCase в качестве второго параметра. Там нет причин, чтобы перечислить варианты для корпуса.
Edit: как упоминает Дарио, это не будет работать для RegularExpressionValidator, так как он не поддерживает корпус опции.
^.+\.(?:(?:[dD][oO][cC][xX]?)|(?:[pP][dD][fF]))$
будет принимать .доктор. ,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/
вы можете встроить нечувствительность к регистру в регулярное выражение следующим образом:
\.(?i:)(?:jpg|gif|doc|pdf)$