前两天工作中遇到个需求,需要对字符串进行掩码,字符串长度不等,需要保留前3位和后6位,中间全部替换为显示。最开始的想法就是截取前3位和后6位字符,中间根据总长度减去9的部分全部替换为
方法一:根据首尾字符截取,然后将中间字符全部替换为*,最后三个字符拼接
maskString (str, startLength, endLength) {
if (!str || str.length <= (startLength + endLength)) return str;
const strLength = str.length;
const strStart = str.substr(0, startLength);
const strEnd = str.substr(strLength - endLength, endLength);
const strMiddle = "*".repeat(strLength - (startLength + endLength)) ;
return `${strStart}${strMiddle}${strEnd}`;
}
方案二:使用replace和正则表达式进行配合
maskString(str, startLength, endLength) {
const regexPattern = new RegExp(`^(.{${startLength}})(.*)(.{${endLength}})$`);
return str.replace(regexPattern, (match, firstLength, middle, lastLength) => {
const maskedMiddle = '*'.repeat(middle.length);
return firstLength + maskedMiddle + lastLength;
});
}
总结:最开始的时候,是直接使用第一种方案(固定写死首尾保留个数),然后里面的首尾长度都固定写死,然后思考了下,这种小需求在项目中可能会有大量使用,而且首尾保留的位数还不一定固定,于是稍作优化,弄完后,又想着用replace和正则表达式进行处理,于是又弄了第二种方案。
网友评论