Как вы пишете регулярное выражение Javascript, которое соответствует, если расширение файла не находится внутри (exe | js | htaccess) - PullRequest
1 голос
/ 20 июля 2011

Я пытаюсь написать регулярное выражение javascript для черного списка расширений файлов. Я использую плагин jquery, который имеет опцию для приемлемых типов файлов, которая принимает регулярные выражения, но вместо того, чтобы поддерживать белый список, мы хотели бы поддерживать черный список. Поэтому мне нужно, чтобы регулярное выражение совпадало, только если строка не содержит определенных расширений файлов. В настоящее время существует регулярное выражение, которое мы используем для добавления расширений в белый список фотографий при загрузке:

/(\.|\/)(gif|jpe?g|png)$/i

Для загрузки нашего документа мы хотели бы просто сделать черный список, но я не смог сделать ?! делиметр работа. Итак, ради примера, как бы я перевернул это регулярное выражение для соответствия, если расширение файла не содержит gif, jpg, jpeg, png?

Я пробовал несколько разных способов использования?!, Но ничего из того, что я пробовал, не работало правильно. Вот несколько примеров того, что я пытался безуспешно:

/(\.|\/)(?!gif|jpe?g|png)$/i

/(\.|\/)(?!(gif|jpe?g|png))$/i

По сути, мне нужно, чтобы это регулярное выражение всегда возвращало значение true, если расширения файлов в черном списке не совпадают.

Ответы [ 3 ]

4 голосов
/ 20 июля 2011

Это работает:

/\.(?!(?:exe|js|htaccess)$)|\/(?!(?:exe|js|htaccess)$)/i

Я думаю, это потому, что «совпадать, только если не следуют» не нравятся скобки перед ним, но я не уверен.

Это новое регулярное выражение теперь работает с круглыми скобками и несколькими расширениями:

/^.*(\.|\/)(?!(exe|js|htaccess)$)(?![^\.\/]*(\.|\/))/i

Однако, чтобы разрешить файлы без расширения, это необходимо использовать:

/(^.*(\.|\/)(?!(exe|js|htaccess)$)(?![^\.\/]*(\.|\/)))|(^[^\.]+$)/i
//                                                     ^^^^^^^^^
//                                  This part matches a name without any dots

Глядя на сложность этого регулярного выражения, я предлагаю вам реализовать что-то на стороне сервера или использовать другой плагин.

2 голосов
/ 20 июля 2011

Взломайте плагин jQuery для принятия функции обратного вызова вместо (или в дополнение к) регулярного выражения.Используйте оператор отрицания (!) и положительное регулярное выражение для предоставления соответствующего обратного вызова.И напишите письмо сопровождающему плагина с просьбой принять ваш патч.

0 голосов
/ 20 июля 2011

Я не эксперт по регулярным выражениям, но что-то вроде этого работает: /\.(exe|js|htaccess)$/ig.test(filename) true результаты, когда файл находится в вашем черном списке.

var shouldblockUpload = /\.(exe|js|htaccess)$/ig.test(filename);
//Inform user illegal upload

Вы также можете явно разрешить только определенные типы файлов черезАтрибут accept для файловых вводов, помогающий подсказывать нужным пользователям.

...