js:使用正则将地理位置脱敏。5个字以内,保留第一个字和最后两个字,其余用*替代;6到9个字则保留最后五个字,其余用*替代;10个字以上则最后五个字的前面四个字代替为*

2023-11-06

需求背景

使用正则将地理位置脱敏。
5个字以内,保留第一个字和最后两个字,其余用*替代;
6到9个字则保留最后五个字,其余用*替代;
10个字以上则最后五个字的前面四个字代替为*

解决方法

	enAdderssFun (text) {
      if (text.length && text.length <= 5) {
        // 保留第1个字和最后2个字,中间用*替代
        return `${text.charAt(0)}${'*'.repeat(text.length - 3)}${text.slice(-2)}`
      }
      if (text.length > 5 && text.length < 10) {
        // 保留最后5个字
        return text.replace(/.(?=.{5})/g, '*')
      }
      if (text.length >= 10) {
        // 隐去最后5个字前面的4个字
        let reversedStr = [...text].reverse().join('')
        let modifiedStr = reversedStr.replace(/(.{5})(.{4})/, (match, g1, g2) => {
          return g1 + g2.replace(/./g, '*')
        })
        let finalStr = [...modifiedStr ].reverse().join('')
        return finalStr
      }
    },

代码解释:

小于5个字时:

`${text.charAt(0)}${'*'.repeat(text.length - 3)}${text.slice(-2)}`

${text.charAt(0)} :取出文本的第一个字符。
${'*'.repeat(text.length - 3)} :生成一个由多个星号组成的字符串,长度为原始文本长度减去3。这里使用了repeat()方法,将星号重复多次,以达到生成指定长度的字符串的目的。
${text.slice(-2)} :取出文本的倒数两个字符。

6-9个字时:

text.replace(/.(?=.{5})/g, '*')

/ :正则表达式的开始。
. :匹配除换行符以外的任意字符。
(?=.{5}) :零宽正向先行断言。表示匹配位置后面的内容必须是5个字符。
.{5} :匹配任意5个字符。
/g :全局匹配。
'*' :替换匹配到的内容为星号。

大于10个字时:

let reversedStr = [...text].reverse().join('') // 反转
let modifiedStr = reversedStr.replace(/(.{5})(.{4})/, (match, g1, g2) => { // 打码
	return g1 + g2.replace(/./g, '*')
})
let finalStr = [...modifiedStr ].reverse().join('') // 反转

将字符串反转,再打码,再反转。因为倒着打码的正则写不出来,所以用了这个方法

结果展示

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

js:使用正则将地理位置脱敏。5个字以内,保留第一个字和最后两个字,其余用*替代;6到9个字则保留最后五个字,其余用*替代;10个字以上则最后五个字的前面四个字代替为* 的相关文章

  • 未捕获的 TypeMismatchError:无法在“CanvasRenderingContext2D”上执行“drawImage”

    我对以下代码片段有疑问 var o inserted motive find span contains document documentElement o 0 b fillText m i h b drawImage d i h e f
  • 按键对 JavaScript 对象进行排序

    我需要按键对 JavaScript 对象进行排序 因此 以下内容 b asdsad c masdas a dsfdsfsdf 会成为 a dsfdsfsdf b asdsad c masdas 这个问题的其他答案已经过时 与实施现实不符 并
  • 从 php 到 JavaScript 的数组

    我正在尝试使用 json 将数组列表从 php 传输到 javascript 但它不起作用 JS ajax url getProfilePhotos php type post post or get method data if you
  • JavaScript - 无需布尔值即可运行一次

    有没有办法只运行一段JavaScript代码ONCE 而不使用布尔标志变量来记住它是否已经运行过 具体来说not就像是 var alreadyRan false function runOnce if alreadyRan return a
  • 如何强制折断不可折断的字符串?

    我有一个根据数据库中包含的数据生成的 HTML 页面 数据库有时包含浏览器无法分解的长字符串 因为这些字符串不包含可分解的字符 空格 点 逗号等 有没有办法使用 html css 甚至 javascript 来解决这个问题 看到这个link
  • Javascript 在另一个函数中检测“Shift”键按下

    我正在从 Flash 影片 使用外部接口 调用我的 html 页面中的 Javascript 函数 并且我想知道调用该函数时用户是否按下了 Shift 键 例如 如果我通过鼠标单击调用该函数 这似乎很简单 因为我可以传递事件并检查 if e
  • 无法读取未定义的“触及”属性

    为什么我会收到此错误无法读取未定义的属性 为什么无法读取formName controls email touched但它能够阅读formName get custDetails touched
  • 在动态创建的元素上添加事件监听器[重复]

    这个问题在这里已经有答案了 是否可以向所有动态生成的元素添加事件侦听器 Javascript 我不是页面的所有者 因此我无法以静态方式添加侦听器 对于页面加载时创建的所有元素 我使用 doc body addEventListener cl
  • 在 setInterval / setTimeout 中使用变量作为时间[重复]

    这个问题在这里已经有答案了 这是一个示例情况 var count time 1000 setInterval function count 1 time 上面的代码会将 count 变量加 1 即 1000 毫秒 看来 setInterva
  • setInterval() 在用户离开选项卡时暂停?

    javascript 中是否有任何方法的行为类似于 setInterval 并且当用户离开选项卡时停止并在用户再次进入选项卡时恢复 您可以使用以下方法创建自己的 API可见性API https developer mozilla org e
  • 使用 :hover 作为元素的内联样式(使用 HTML/CSS/php)[重复]

    这个问题在这里已经有答案了 可能的重复 如何将 a hover 规则嵌入到文档中间的样式属性中 https stackoverflow com questions 131653 how do i embed an ahover rule i
  • 带有 mkdocs 的本地 mathjax

    我想在无法访问互联网的计算机上使用 MathJax 和 Mkdocs 因此我不能只调用 Mathjax CDN Config mkdocs yml site name My Docs extra javascript javascripts
  • 如何在 javascript 中基于类型字符串创建新对象?

    如何基于变量类型字符串 包含对象名称 在 javascript 中创建新对象 现在我有 随着更多工具的出现 列表会变得更长 function getTool name switch name case SelectTool return n
  • 为什么 Array.prototype.filter() 在 Magnolia JavaScript 模型中抛出错误?

    我正在尝试过滤 FreeMarker 列表Magnolia JavaScript 模型 https documentation magnolia cms com display DOCS61 How to work with JavaScr
  • Javascript onload 不起作用[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我正在使用
  • 使用 AJAX 和 JQuery 按设定的时间间隔刷新 Rails 部分

    I have a page in my rails application that looks like 现在 我有另一个用 python 编码的人工智能应用程序 它处理视频 显示在 Rails 应用程序页面的左侧 并使用捕获的车辆及其相
  • 检测浏览器选项卡是否具有焦点

    是否有可靠的跨浏览器方法来检测选项卡是否具有焦点 场景是 我们有一个定期轮询股票价格的应用程序 如果页面没有焦点 我们可以停止轮询并为每个人节省流量噪音 特别是当人们喜欢打开具有不同投资组合的多个选项卡时 Is window onblur
  • 在方法内部执行方法

    我目前正在 FreeCodeCamp 中进行 JavaScript 练习 我的代码应该使用的测试用例之一是函数调用 如下所示 addTogether 2 3 这是我得到的基本功能 function addTogether return 当我
  • 搜索多维数组 JavaScript

    我有一个如下所示的数组 selected products 0 r1 7up 61 Albertsons selected products 1 r3 Arrowhead 78 Arrowhead selected products 2 r
  • p5 向量减法“sub”返回错误

    我一直在尝试将 p5 草图上传到 React 构建中 使用react p5 wrapper 我能够成功在屏幕上渲染画布 但是 某些矢量函数会导致错误 var distance this position dist ball position

随机推荐

  • ThreadPoolExecutor - Java 线程池示例

    Java线程池管理工作线程池 它包含一个队列 使任务等待执行 我们可以用ThreadPoolExecutor在Java中创建线程池 Java线程池管理Runnable线程的集合 工作线程执行队列中的可运行线程 java util concu
  • 使用 Docker Compose 将 Node.js 应用程序容器化以进行开发

    介绍 如果您正在积极开发应用程序 请使用Docker可以简化您的工作流程以及将应用程序部署到生产的过程 在开发中使用容器可以带来以下好处 环境是一致的 这意味着您可以为项目选择所需的语言和依赖项 而不必担心系统冲突 环境是隔离的 可以更轻松
  • 在 JavaScript 中使用位运算符

    介绍 虽然 Javascript 中的按位运算符几乎没有受到任何关注 但它们实际上非常强大并且用途广泛 它们被认为可以更快地进行数值计算和转换 我们可以利用它们来替代某些复杂的编码场景 并使我们的代码更具可读性 在本教程结束时 您将基本了解
  • 命令设计模式

    命令模式是行为设计 模式之一 命令设计模式用于实现松耦合在请求 响应模型中 命令模式 In command pattern the request is send to the invoker and invoker pass it to
  • 如何在 CentOS 6 上设置 Apache 虚拟主机

    Status 已弃用 本文介绍不再受支持的 CentOS 版本 如果您当前运行的服务器运行 CentOS 6 我们强烈建议您升级或迁移到受支持的 CentOS 版本 Reason CentOS 6 于 2020 年 11 月 30 日达到生
  • 如何在 Ubuntu 18.04 上安装 Anaconda [快速入门]

    介绍 Anaconda 专为数据科学和机器学习工作流程而设计 是一款开源包管理器 环境管理器以及 Python 和 R 编程语言的分发版 本教程将指导您在 Ubuntu 18 04 服务器上安装 Anaconda 有关本教程的更详细版本以及
  • 如何在 Ubuntu 14.04 上安装和配置 OSSEC 安全通知

    介绍 您如何跟踪服务器上的授权和未经授权的活动 OSSEC 是一种可以安装在服务器上以跟踪其活动的工具 OSSEC 是一种开源 基于主机的入侵检测系统 HIDS 它执行日志分析 完整性检查 Windows 注册表监控 rootkit 检测
  • 如何在 Ubuntu 22.04 上安装和保护 Grafana

    介绍 Grafana是一种开源数据可视化和监控工具 可与来自以下来源的复杂数据集成普罗米修斯 InfluxDB Graphite and 弹性搜索 Grafana 允许您为数据创建警报 通知和临时过滤器 同时还可以通过内置共享功能更轻松地与
  • 如何在 Ubuntu 12.10 上使用 Nginx 设置 HTTP 身份验证

    什么是Red Means 用户需要输入或自定义的行将位于red在本教程中 其余的大部分应该是可复制和粘贴的 关于 Nginx Nginx 发音为 engine x 是一个 HTTP 和反向代理服务器 以及邮件代理服务器 由 Igor Sys
  • 如何在零停机的情况下将 WordPress 从共享主机迁移到云服务器

    Status 已弃用 本文介绍不再受支持的 Ubuntu 版本 如果您当前运行的服务器运行 Ubuntu 12 04 我们强烈建议您升级或迁移到受支持的 Ubuntu 版本 升级到Ubuntu 14 04 从 Ubuntu 14 04 升级
  • 如何在 Ubuntu 22.04 上使用 apt 安装 Java

    介绍 许多软件都需要 Java 和 JVM Java 虚拟机 包括Tomcat Jetty 玻璃鱼 卡桑德拉 and Jenkins 在本指南中 您将使用以下命令安装各种版本的 Java 运行时环境 JRE 和 Java 开发人员工具包 J
  • 如何在 Ubuntu 16.04 上使用 GitLab CI 设置持续集成管道

    介绍 GitLab 社区版是一个自托管的 Git 存储库提供商 具有帮助项目管理和软件开发的附加功能 GitLab 提供的最有价值的功能之一是内置的持续集成和交付工具 称为亚搏体育appGitLab持续集成 在本指南中 我们将演示如何设置
  • Linux 中的导出命令

    在本指南中 我们将了解 Linux 中的导出命令 Export 是 Bash shell 的内置命令 它用于标记要传递给子进程的变量和函数 基本上 变量将包含在子进程环境中 而不会影响其他环境 为了更清楚地了解我们正在讨论的内容 让我们深入
  • 如何在 Ubuntu 20.04 上安装 Node.js

    介绍 Node js是用于服务器端编程的 JavaScript 运行时 它允许开发人员使用 JavaScript 创建可扩展的后端功能 这是许多人在基于浏览器的 Web 开发中已经熟悉的语言 在本指南中 我们将向您展示在 Ubuntu 20
  • 如何在 Ubuntu 13.10 上安装 Hadoop

    先决条件 本教程的唯一先决条件是 VPS乌班图 13 10 x64安装 您需要从命令行执行命令 可以通过以下两种方式之一执行 使用 SSH 访问 Droplet 使用 Digital Ocean Droplet 管理面板中的 控制台访问 什
  • 如何在 CentOS 7 上将 MySQL 数据目录更改到新位置

    介绍 数据库随着时间的推移而增长 有时会超出文件系统上的空间 当它们与操作系统的其余部分位于同一分区时 您也可能会遇到 I O 争用 RAID 网络块存储和其他设备可以提供冗余和其他所需的功能 无论您是要添加更多空间 评估优化性能的方法 还
  • 如何设置 MySQL 主主复制

    Status 已弃用 本教程已被弃用并且不再维护 Reason 本教程介绍了构建多主拓扑的过时方法 在本文最初发表时 MySQL 中尚未实现组复制 请参阅 您可以阅读最新的如何在 Ubuntu 16 04 上配置 MySQL 组复制设置多主
  • 如何在 CentOS 7 上使用 Barman 备份、恢复和迁移 PostgreSQL 数据库

    介绍 PostgreSQL是一个开源数据库平台 因其易于维护 成本效益以及与其他开源技术的简单集成而深受 Web 和移动应用程序开发人员的欢迎 维护 PostgreSQL 环境的一项关键任务是定期备份其数据库 备份是任何组织灾难恢复 DR
  • NGINX 作为 Node 或 Angular 应用程序的反向代理

    反向代理是一种从一个或多个上游服务器为客户端检索资源的服务器 它通常将自己置于专用网络中的防火墙后面 并将客户端请求转发到这些上游服务器 反向代理极大地提高了任何 Web 应用程序的安全性 性能和可靠性 许多用 NodeJS 或 Angul
  • js:使用正则将地理位置脱敏。5个字以内,保留第一个字和最后两个字,其余用*替代;6到9个字则保留最后五个字,其余用*替代;10个字以上则最后五个字的前面四个字代替为*

    需求背景 使用正则将地理位置脱敏 5个字以内 保留第一个字和最后两个字 其余用 替代 6到9个字则保留最后五个字 其余用 替代 10个字以上则最后五个字的前面四个字代替为 解决方法 enAdderssFun text if text len