我有一个正则表达式需要检查 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() 调用是否递归发生?如果是这样,我该如何解决这个问题?
而不是正则表达式 - 这可能会导致最大调用堆栈大小问题,例如这个
您可以尝试使用另一种方法,例如:
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 的图像进行测试)