提问人:Debaleen Sengupta 提问时间:11/11/2023 最后编辑:Roko C. BuljanDebaleen Sengupta 更新时间:11/11/2023 访问量:34
验证 Base64 正则表达式导致 RangeError 超出最大调用堆栈大小
Validate Base64 Regex causes RangeError Maximum call stack size exceeded
问:
我有一个正则表达式,需要检查 base64 是否有效。目前我在 NodeJS 中的代码如下所示:
let base64regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;
if (base64regex.test(Payload.fileData) === true) {
//Further process the filedata
}
对于不超过 1.6MB 的较小 base64 文件,正则表达式工作正常,但对于较大的文件 (>2MB),它会导致:
RangeError: Maximum call stack size exceeded
at RegExp.test (<anonymous>)
如何在不导致堆栈大小超过错误的情况下接受更大的 base64 数据?
我在stackoverflow上看到了示例,但他们都没有遇到过这个问题。base64regex.test() 调用是否递归发生?如果是这样,我该如何解决这个问题?
答:
0赞
Roko C. Buljan
11/11/2023
#1
而不是 RegExp - 这可能会导致像这样的最大调用堆栈大小问题,
您可以尝试使用另一种方法,例如:
const isValidBase64 = b => {
try {
return b.length > 3 && !(b.length % 4) && atob(b) && true;
} catch(err) {
return false;
}
}
// Example:
console.log(
isValidBase64(""), // false
isValidBase64("a"), // false
isValidBase64("aZ="), // false
isValidBase64("aZ+9===="), // false
isValidBase64("aZ+9/Š=="), // false
isValidBase64("aZ+9"), // true
isValidBase64("aZ+9/B=="), // true
);
(使用尺寸为 >18Mb) 的图像进行测试)
- MDN:全局 fn atob
评论