如果文件扩展名不在(exe|js|htaccess)内,你如何编写一个Javascript Regex匹配

How do you write a Javascript Regex that matches if file extension is not within (exe|js|htaccess)

本文关键字:何编写 一个 匹配 Regex Javascript exe 扩展名 文件 js 如果 htaccess      更新时间:2023-09-26

我正试图为文件扩展名的黑名单写一个javascript regexp。我使用的是一个jquery插件,它有一个可接受的文件类型选项,需要一个正则表达式,但不是维护一个白名单,我们希望维护一个黑名单。所以我需要正则表达式只匹配,如果字符串不包含某些文件扩展名。目前,我们使用一个正则表达式将照片扩展名列入白名单:

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

对于我们的文档上传,我们想简单地做一个黑名单,但是我还没有能够做?!字段名的工作。因此,为了一个例子,我如何扭转这个正则表达式匹配,只要文件扩展名不包含gif, jpg, jpeg, png?

我已经尝试了几种不同的方法来使用?!但我试过的方法都不奏效。以下是我尝试过的一些不成功的例子:

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

基本上我需要这个regex总是返回true,除非黑名单文件扩展名匹配。

如此:

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

我认为这是因为"match only if not follow by"不喜欢前面的括号,但我不确定。

这个新的正则表达式现在可以使用括号和多个扩展名:

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

但是,为了允许没有扩展名的文件,必须使用:

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

考虑到正则表达式的复杂性,我建议你在服务器端实现一些东西,或者使用另一个插件。

修改jQuery插件以接受回调函数而不是(或除了)正则表达式。使用负运算符(!)和正正则表达式来提供适当的回调。并写一封邮件给插件的维护者,请他接受你的补丁。

我不是一个正则表达式专家,但这样的东西似乎是有效的:/'.(exe|js|htaccess)$/ig.test(filename)真实结果时,文件是在你的黑名单。

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

您还可以通过文件输入的accept属性明确地只允许某些文件类型,以帮助提示用户正确的文件类型。

相关文章: