如果文件扩展名不在(exe|js|htaccess)内,你如何编写一个Javascript Regex匹配
How do you write a Javascript Regex that matches if file extension is not within (exe|js|htaccess)
我正试图为文件扩展名的黑名单写一个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属性明确地只允许某些文件类型,以帮助提示用户正确的文件类型。
- 如何编写一个具有公共标头的批处理
- 我该如何编写一个CouchDB视图,列出每个存储文档的大小
- 编写一个序列,在任何地方都没有 0
- 如何使用原型继承编写一个整洁灵活的复杂javascript应用程序
- 我如何为列出的选项卡元素编写一个Protractor测试,它会检查它是否's是否处于活动状态
- 有没有理由编写一个IIFE,用前导'不是'-JavaScript中的运算符(!)
- 给定一个带有数字的数组,我如何编写一个递归函数,当 2 个元素加起来为一个目标时,它会在数组中查找索引
- 如何编写一个抽象层来隐藏 jquery 中的 DOM 元素
- Javascript:编写一个函数,接收一个数组,然后返回一个只有唯一数字的数组,只删除数组
- 编写一个包含一个大写字母和六个数字的javascript表达式
- 如何编写一个不死边界的变量
- 我该如何编写一个正则表达式来捕获具有特定类的HTML表
- 编写一个使用传递两个参数的回调的承诺
- 编写一个代码来拆分字符串“test”,并将Name的值分配给文本框,将ok的值分配到复选框
- 编写一个函数需要帮助,该函数接受一个数组和一个元素,并返回一个删除了所有元素的数组
- 我该如何编写一个正则表达式来匹配字符串后面的值(到下一个逗号)
- 我正在用java脚本编写一个hangman程序,如果玩家失败了,我需要帮助来显示这个词
- 在多个文件中编写一个函数名的Javascript
- 可以编写一个预先加载所有图像和视频的JavaScript程序
- 以无点风格在Ramda中编写一个无参数函数