首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在JavaScript中屏蔽名字、中间名和姓?

如何在JavaScript中屏蔽名字、中间名和姓?
EN

Stack Overflow用户
提问于 2020-03-04 13:08:06
回答 1查看 983关注 0票数 1

我如何使掩蔽在名字,中间名,和姓氏?根据名称中每个单词中的字母数进行掩蔽。在此条件下:

  1. 如果一个单词包含2个字母,那么如果有3-4个字母,则没有掩蔽
  2. ,那么前两个字母将被蒙住;
  3. ,如果有更多的4个字母,则前2个字母和最后一个字母将被蒙面。

例子:

1.“乔·戴恩·罗杰”-->“乔**”

2.“萨曼莎·夏”->“**曼斯*小姐*”

我试着计算了一个单词的长度,在那个掩蔽之后。但我不知道如果有两个以上的词

代码语言:javascript
复制
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;
}

有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-04 13:21:39

您可以使用正则表达式来完成这一任务。

对于案例2(带有3个或4个字母的单词):

代码语言:javascript
复制
// 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+字母的单词):

代码语言:javascript
复制
// 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*");

合在一起:

代码语言:javascript
复制
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*");
}

用法:

代码语言:javascript
复制
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匹配用圆括号

捕获的组。

基于评论的新职能:

代码语言:javascript
复制
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字母的词,就像在第一个功能。

用法:

代码语言:javascript
复制
mask2("Steven Harts");   // returns "St***n Ha**s"
mask2("Jo Dyne Roger");  // returns "Jo Dyne Ro**r"
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60526837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档