我如何使掩蔽在名字,中间名,和姓氏?根据名称中每个单词中的字母数进行掩蔽。在此条件下:
例子:
1.“乔·戴恩·罗杰”-->“乔**”
2.“萨曼莎·夏”->“**曼斯*小姐*”
我试着计算了一个单词的长度,在那个掩蔽之后。但我不知道如果有两个以上的词
function nameMasking(name) {
var masking = "";
var replace = "*";
for(var i = 0; i < name.length-3; i++){
masking = masking + replace;
}
accountNum = masking + name.substring(name.length+2, name.length);
return name;
}有什么建议吗?
发布于 2020-03-04 13:21:39
您可以使用正则表达式来完成这一任务。
对于案例2(带有3个或4个字母的单词):
// match 2 letters, then 1 or 2 more letters
var regex1 = /\b\S{2}(\S{1,2})\b/g;
// replace first 2 letters with **, leave the rest
name = name.replace(regex1,"**$1");对于案例3(带有5+字母的单词):
// match 2 letters, then 2 or more letters, then 1 more letter
var regex2 = /\b\S{2}(\S{2,})\S\b/g;
// replace first 2 with **, replace last letter with *, leave the middle
name = name.replace(regex2,"**$1*");合在一起:
function mask(name) {
var regex1 = /\b\S{2}(\S{1,2})\b/g;
var regex2 = /\b\S{2}(\S{2,})\S\b/g;
return name.replace(regex1,"**$1").replace(regex2,"**$1*");
}用法:
mask("Jo Dyne Roger"); // returns "Jo **ne **ge*"
mask("Samantha Summer"); // returns "**manth* **mme*"解释:
\b匹配字界.\S与任何非空格字符匹配。
{2}告诉它发现两个事件,{1,2}表示1或2个,{2,}表示2个或更多的。
末尾的
g用于全局(匹配字符串中所有适用的单词)替换中的
$1匹配用圆括号捕获的组。
基于评论的新职能:
function mask2(name) {
// match (first 2 letters), (2 or more middle letters), (last letter)
var regex = /\b(\S{2})(\S{2,})(\S)\b/g;
// leave 1st and 3rd groups, but replace letters in second group with stars
return name.replace(regex, function(m,g1,g2,g3) {
return g1+g2.replace(/./g,"*")+g3;
});
}您可以做额外的替换,以掩蔽1-4字母的词,就像在第一个功能。
用法:
mask2("Steven Harts"); // returns "St***n Ha**s"
mask2("Jo Dyne Roger"); // returns "Jo Dyne Ro**r"https://stackoverflow.com/questions/60526837
复制相似问题