Регулярное выражение для исключения типов файлов .exe и .js

Я использую плагин загрузки файлов JQuery, чтобы дать значение опции accept files. Мне нужно регулярное выражение, которое сообщит, какие типы файлов должны быть ограничены. Мне нужно ограничить как exe, так и js, чего я достиг, используя выражение ниже

(\.|\/)(!exe|!js)$

Но это выражение не разрешало и другие файлы, тогда я попытался добавить одно расширение, как показано ниже.

(\.|\/)(!exe|!js|pdf)$

С регулярным выражением выше он принимает только pdf и не принимает exe и JS. Теперь мне нужно включить все расширения файлов, кроме exe и js. К выражению будет сложно добавить все расширения. Можем ли мы упомянуть, как в выражении принимать другие типы файлов, кроме exe и js, в аналогичном формате, указанном выше. Это регулярное выражение предназначено для JS.

Спасибо,

Vinay


person Vinay    schedule 20.04.2014    source источник


Ответы (3)


Это исключит .js и .exe в конце строки, но разрешит все остальное:

/^[^.]+$|\.(?!(js|exe)$)([^.]+$)/

Сломано:

  1. ^[^.]+$ соответствует любой строке без точек
  2. \.(?!(js|exe)$)([^.]+$) соответствует точке, только если за ней не следует js или exe в конце строки.

Допускаются:

  • something.js.notjs
  • somethingelse.exee
  • /something.js/foo

Запрещено следующее:

  • jquery.js
  • outlook.exe

Примечание. исключение определенных расширений файлов не является заменой безопасности, и даже если бы это были файлы JS и EXE, они не были бы полным черным списком. Если ваша цель исключения определенных расширений - защитить ваш сервер или ваших пользователей, рассмотрите белый список расширений и тщательную проверку данных файла после загрузки.

person eyelidlessness    schedule 20.04.2014
comment
Спасибо за подробную информацию. Регулярное выражение работает с небольшой проблемой. Когда я добавляю более одного exe-файла, инструмент не показывает ошибку проверки для второго exe-файла. Мне нужно посмотреть, есть ли проблема с плагином JS. - person Vinay; 21.04.2014

Вы хотите использовать синтаксис (?! Pattern). Кроме того, заявляя, что вы хотите сопоставить, вы не указываете, что должно совпадать. Итак, это должно сработать:

(\.|\/)(?!exe|js).*$

Он говорит: «Сопоставьте все, что является точкой (.), Если за ней не следует« exe »или« js », а затем сопоставьте все, что вы хотите после этого».

person David Maddox    schedule 20.04.2014
comment
Я протестировал это выражение на этом веб-сайте regexr.com/v1 Я думаю, что оно работает, как ожидалось, но когда Я даю это как вариант плагину, который я использую, он не работает, он принимает все типы файлов. Мне нужно добавить «/» впереди и добавить «/ i» в конце, чтобы сделать это правильно. Итак, окончательное значение, которое я передаю этой опции, - /(\.|\/)(?!exe|js).*$/i добавит их в регулярное выражение, и это будет иметь значение. - person Vinay; 20.04.2014
comment
Это вернет ложноотрицательный результат для таких строк, как foo.jss и /execution/files. - person eyelidlessness; 20.04.2014
comment
Вы правы, @eyelidlessness. Мне нужно было бы сделать ?! синтаксис (?! (exe | js) $). * $ - person David Maddox; 22.04.2014

Я не знаю эту работу или нет, но на 99% это сработает для вас, чтобы исключить это расширение exe или js, используя следующий шаблон

/\.(exe|js)$/ig

Следующий код дает вам ИСТИНА, когда файл находится в вашем черном списке. В противном случае вы получите ЛОЖЬ

var result = /\.(exe|js)$/ig.test(filename);

Надеюсь, это поможет вам!

person Jay Patel    schedule 20.04.2014
comment
Он работает прямо противоположным образом. Он принимает exe и js, но не любой другой формат. Не могли бы вы дать противоположное этому условию, я думаю, что отрицательное условие для этого решит проблему - person Vinay; 20.04.2014
comment
Вы используете знак !, чтобы преобразовать все в отрицательное состояние. /\.(!exe|!js)$/ig - person Jay Patel; 20.04.2014
comment
Только что попробовал это, продолжая таким образом говорить, что все типы файлов недействительны, включая exe и js - person Vinay; 20.04.2014