前兩天工作中遇到個(gè)需求,需要對(duì)字符串進(jìn)行掩碼,字符串長(zhǎng)度不等,需要保留前3位和后6位,中間全部替換為顯示。最開(kāi)始的想法就是截取前3位和后6位字符,中間根據(jù)總長(zhǎng)度減去9的部分全部替換為
方法一:根據(jù)首尾字符截取,然后將中間字符全部替換為*,最后三個(gè)字符拼接
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和正則表達(dá)式進(jìn)行配合
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;
});
}
總結(jié):最開(kāi)始的時(shí)候,是直接使用第一種方案(固定寫(xiě)死首尾保留個(gè)數(shù)),然后里面的首尾長(zhǎng)度都固定寫(xiě)死,然后思考了下,這種小需求在項(xiàng)目中可能會(huì)有大量使用,而且首尾保留的位數(shù)還不一定固定,于是稍作優(yōu)化,弄完后,又想著用replace和正則表達(dá)式進(jìn)行處理,于是又弄了第二種方案。