Regular Expression for Extension of File

javascript, regex

Solution

Try `/^(.*\.(?!(htm|html|class|js)$))?[^.]*$/i`

Try it here: http://regexr.com?35rp0

It will also work with extensionless files.

As all the regexes, it's complex to explain... Let's start from the end

[^.]*$ 0 or more non . characters
( ... )? if there is something before (the last ?)

.*\.(?!(htm|html|class|js)$) Then it must be any character in any number .*
                             followed by a dot \.
                             not followed by htm, html, class, js (?! ... )
                             plus the end of the string $
                             (this so that htmX doesn't trigger the condition)

^ the beginning of the string

This one `(?!(htm|html|class|js)` is called zero width negative lookahead. It's explained at least 10 times every day on SO, so you can look anywhere :-)

Problem

I need 1 regular expression to put restrictions on the file types using it's extension. I tried this for restricting the file type of html, .class, etc. - `/(\.|\/)[^(html|class|js|css)]$/i` - `/(\.|\/)[^html|^class|^js|^css]$/i` I need to restrict a total of 10-15 types of files. In my application there is a field for accepted file type, and according to the requirement I have file types which is to be restricted. So I need a regular expression using negation of restricted file type only. The plugin code is like: ``` $('#fileupload').fileupload('option', { acceptFileTypes: /(\.|\/)(gif|jpe?g|png|txt)$/i }); ``` I can specify the acceptedFileType but i have given the requirement to restrict a set of file.

Original source