TypeScript中如何用正则校验禁止用户输入{[ key .. ]}语法
问题修正方案
错误原因
- 正则构造错误:用字符串创建
RegExp对象时需要处理双重转义,原代码错误将\s写为普通字符s,且{、[、]等正则特殊符号未正确转义,导致正则完全无法匹配目标内容 - 逻辑冗余:无需遍历所有匹配结果,只要检测到存在任意一次非法调用即可直接返回错误,使用
test方法性能更优
修正代码
推荐写法(正则字面量,无需处理双重转义)
// 匹配所有{[ key "xxx" ]}格式的非法调用 const invalidKeyPattern = /{\[\s+key\s+"[^"]+"\s+]}/g if (invalidKeyPattern.test(value)) { return createError({ message: "use {[ env .. ]} instead of {[ key .. ]}" }) } // 校验通过后续逻辑
RegExp构造函数写法(适合需要动态生成正则的场景)
// 注意字符串内反斜杠需要双重转义 const invalidKeyPattern = new RegExp('{\\[\\s+key\\s+"[^"]+"\\s+]}', 'g') if (invalidKeyPattern.test(value)) { return createError({ message: "use {[ env .. ]} instead of {[ key .. ]}" }) }
正则优化说明
将原正则的.+?替换为[^"]+,匹配效率更高,同时避免了内容包含特殊字符时的意外匹配问题,匹配精准度和性能都更优。
内容的提问来源于stack exchange,提问作者Tilak Raj
相关产品推荐
相关产品推荐

