2014-04-20 102 views
6

我正在使用JQuery文件上传插件,为选项接受文件赋值我需要正则表达式,它会告诉什么是要限制的文件类型。我需要限制两者的exe和JS,我通过使用以下表达式排除文件类型.exe和.js的正则表达式

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

实现但这表达没有允许其他文件以及然后我尝试添加一个延伸部如下

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

以上正则表达式只接受pdf,不接受exe和JS。现在我需要启用除exe和js之外的所有文件扩展。将表达式的所有扩展添加到其中是很困难的。我们能否提到一些如何在表达式中接受除上述类似格式的exe和js以外的其他文件类型。这个正则表达式适用于JS。

感谢,

维奈

回答

10

这将排除.js.exe在字符串的结束,而是让别的:

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

拆毁了

  1. ^[^.]+$匹配任何字符串,没有点
  2. \.(?!(js|exe)$)([^.]+$)比赛只有在字符串末尾没有跟随jsexe的情况下才有点。

以下是允许的:

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

以下是不允许的:

  • jquery.js
  • outlook.exe

注:排除某些文件扩展名是不是安全的替代品,即使它是JS和EXE文件不会是一个全面的黑名单。如果您排除某些扩展的目的是为了保护您的服务器或您的用户,请考虑上传后的白名单扩展名和文件数据的全面验证。

+0

感谢您的详细信息。正则表达式正在处理一些小问题。当我添加多个exe文件时,该工具不会显示第二个exe文件的验证错误。我需要看看插件JS是否有问题。 – Vinay

0

我不知道这工作或没有,但99%以上,这将工作,为您排除此exe或JS扩展使用下面的模式

/\.(exe|js)$/ig 

下面的代码当文件在您的黑名单上时,会给予您真实性。否则给你错假

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

希望这对你有所帮助!

+0

它正在以完全相反的方式工作。它接受EXE和JS,但没有任何其他格式。您能否给出与此相反的条件,我认为这样做的负面情况会解决问题 – Vinay

+0

您是否使用'!'符号将整个事情转化为负面情况。 '/ \。(!exe |!js)$/ig' –

+0

刚才试过,保持这种说法,所有的文件类型都是无效的,包括exe和js – Vinay

1

您正在寻找使用(?!pattern)语法。另外,在说明你想要匹配什么时,你并没有说明应该匹配什么。

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

这是说:“匹配任何这是一个点,只要它不是其次是‘EXE’或‘JS’,然后匹配任何你以后想:那么这应该做的伎俩(。)。 “

+0

我在这个网站测试了这个表达式http:// www.regexr.com/v1/我认为它按预期工作,但是当我将此作为选项提供给我使用的插件时,它不起作用,它接受所有文件类型。我需要在前面添加'/',并在末尾添加'/ i'以正确的方式添加。因此,我传递给该选项的最终值是/(..|//)(?!exe|js).*$/i将这些添加到正则表达式将会产生任何影响 – Vinay

+0

这将返回一个false negative像'foo.jss'和'/ execution/files'这样的字符串。 – eyelidlessness

+0

You are right,@eyelidlessness。我需要制作?!语法(?!(exe | js)$)。* $ –