最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

NodeJS 正则表达式测试函数生成范围错误

网站源码admin27浏览0评论

NodeJS 正则表达式测试函数生成范围错误

NodeJS 正则表达式测试函数生成范围错误

我需要检查特定字符串是否是有效的 base64。在传递一个非常大的有效 base64 字符串后,测试函数遇到范围错误(超出最大调用堆栈大小)。

if (/^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)?$/.test(base64)) {
    // if valid base64 proceed, ...
} 

我应该如何避免遇到这个错误?我应该将 base64 字符串分成更小的字符串并单独测试吗?

回答如下:

有这些规则要检查:

  1. 最多允许两个
    =
    符号,并且它们应该在输入的最后
  2. 所有其他字符应为字母数字或
    +
    /
  3. 总输入长度必须是4的倍数

为避免大量回溯,您可以通过在 JavaScript 中进行简单检查来执行最后一次检查:字符串长度模 4 应为 0。

所以这导致了这段代码:

function verifyBase64(base64) {
    return base64.length % 4 == 0 && /^[A-Za-z0-9+\/]*=?=?$/.test(base64);
}

let base64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
base64 = base64.repeat(100000); 

console.log(verifyBase64(base64)); // true
console.log(verifyBase64(base64 + "=")); // false
console.log(verifyBase64(base64 + "ab==")); // true
发布评论

评论列表(0)

  1. 暂无评论