这是代码:
isValid = field.uploads.forEach(upload => {
console.log(upload.file)
console.log('ext:', _.getFileExt(upload.file.name))
console.log('reg:', regex)
console.log('res:', regex.test(_.getFileExt(upload.file.name)))
})
这些是日志:
ext: jpg
reg: /^.*\.(.jpg)$/i
res: false
如您所见,即使文件是jpg,正则表达式也会返回false。这是为什么?
修改
以下是效用函数:
_.listToRegex = (array) => {
return new RegExp('^.*\\.(' + array.join('|') + ')$', 'i')
}
_.getFileExt = (string) => {
return string.split('.').pop()
}
答案 0 :(得分:2)
据我所知,你有两个问题。首先,您的正则表达式有错误。其次,您必须确定要创建的正则表达式是否与文件名或文件扩展名匹配。
1。如上面的评论中所述,记录到控制台的正则表达式包含一个额外的句点。如果您只打算使用表达式来测试有效性,/^.*\.(.jpg)$/i
可以压缩到/\.(jpg)$/i
。您似乎没有显示正则表达式变量的赋值,因此很难判断出错误的确切程度,但我最好的猜测是您调用了listToRegex
实用程序,如:
var regex = _.listToRegex(['.jpg'])
字符串.
中的'.jpg'
会导致引入额外的期间。您可以用以下代码替换该代码:
var regex = _.listToRegex(['jpg'])
2. 其次,当我想要根据文件名对其进行测试时,您似乎正在针对文件扩展名测试正则表达式。
regex.test(upload.file.name) //=> true