javaScript 蓝桥杯----梅楼封的一天
目录
- 一、介绍
- 二、目标
- 1.函数入参要求:
- 2.出参要求:
- 三、输出示例
- 1.示例一
- 2.示例二
- 3.示例三
- 4.示例四
- 5.示例五
- 四、待完善代码
- 五、知识点
- 1.正则表达式
- 2.split方法
- 3.test方法
- 4.match方法
- 5.matchAll方法
- 6.slice方法
- 7.replace() 方法
- 8.repeat方法
- 六、答案
一、介绍
抖音"封神榜"大家可都知道?大名鼎鼎的梅楼封是抖音玩家最害怕的人物,在抖音玩家中,谁都不想在封神榜中留名,玩家只要说话违规,那么就有可能入住封神榜,然后各种悲催的日子就来了,想要不被梅楼封关注,就要学会说话的套路,避免被封杀。
今天我们来到蓝桥云课,在这里让你体验一把梅楼封的权利,炫耀一下自己,杀杀不遵守规则玩家的锐气。好了,废话不多说,现在就带你坐镇蓝桥云课,体验梅楼封的一天!
二、目标
玩家说话没技巧,让你感到很愤怒,要求封装一个方法,将该玩家封杀:
1.函数入参要求:
第一个参数为字符串(任意字符串)。
第二个参数为脱敏规则,可以是字符串,也可以是数组。
第三个参数是字符串,表示用什么来占位脱敏文字(默认为:*)。
第四个参数是:是否将手机号(11 位数字)进行脱敏,默认为 true(规则是:保留前三位和后三位,中间脱敏占位)。
// 函数传递参数,输出 {ids: [1], newStr: '开*每一天'}
toDesensitization("开心每一天", ["心"], "*", false);
2.出参要求:
- 第一个参数不存在返回 null。
- 第一个参数存在,第二个参数不存在,返回原字符串。
- 第一个参数和第二个参数都存在,返回脱敏后的新字符串以及被脱敏的文本位置,返回格式是一个对象( 注意:无论手机号是否脱敏处理,都不会返回手机号的被脱敏时的位置 ),格式如下:
{"ids": [],"newStr": ""
}
三、输出示例
1.示例一
输入内容
人的一生,好不好只有自己知道,乐不乐只有自己明白。快乐是一种心情,一种自然、积极向上的心态。在平凡之中寻求快乐,在磨难之中寻求快乐,在曲折之中需求快乐。
规则为:“向上”
脱敏占位符为: “*”
输出返回
{"ids": [40],"newStr": "人的一生,好不好只有自己知道,乐不乐只有自己明白。快乐是一种心情,一种自然、积极**的心态。在平凡之中寻求快乐,在磨难之中寻求快乐,在曲折之中需求快乐。"
}
2.示例二
输入内容
不论这个世界多么糟糕,你的世界一定要精彩;不论人心多么黑暗,你的内心一定要明亮。不要用糟糕去对付糟糕,不要用黑暗去对付黑暗。心里充满阳光,世界就光明无比;心里充满感恩,世界因此灿烂。请记住:你的付出决定你的未来,你的汗水记得你的成就,你的态度决定你的一切.
规则为:[‘糟糕’,‘记得’, ‘定’]
脱敏占位符为: *
输出返回:
{"ids": [8, 43, 48, 110, 16, 35, 100, 122],"newStr": "不论这个世界多么**,你的世界一*要精彩;不论人心多么黑暗,你的内心一*要明亮。不要用**去对付**,不要用黑暗去对付黑暗。心里充满阳光,世界就光明无比;心里充满感恩,世界因此灿烂。请记住:你的付出决*你的未来,你的汗水**你的成就,你的态度决*你的一切。"
}
3.示例三
输入内容
今天有人宣传要手机号等个人信息,可是骚扰电话太多了,不想泄漏隐私,哎,想来是熟人,没办法,我的手机号是 15698254321,你一定要记好了。
规则为:[‘宣传’,‘骚扰’,‘私’]
脱敏占位符为: *
是否脱敏手机号:true
输出返回:
{"ids": [4,18,31],"newStr": "今天有人**要手机号等个人信息,可是**电话太多了,不想泄漏隐*,哎,想来是熟人,没办法,我的手机号是 156*****321,你一定要记好了。"
}
4.示例四
输入内容
来好吗!怎样一向不打电话给我啊。知道吗?我还是我,但号码已经换成了 15273773888,多联络啊。
规则为:‘号码’
脱敏占位符为: *
是否脱敏手机号:true
输出返回:
{"ids": [26],"newStr": "来好吗!怎样一向不打电话给我啊。知道吗?我还是我,但**已经换成了 152*****888,多联络啊。"
}
5.示例五
输入内容
uofjjflsjhahf废旧塑料ffjsljfs
规则为:‘jj’
输出返回:
{"ids": [3],"newStr": "uof**flsjhahf废旧塑料ffjsljfs"
}
四、待完善代码
/*** @description:* @param {*} str* @param {*} rule* @param {*} symbol* @param {*} dealPhone* @return {*}*/const toDesensitization = (str, rule, symbol = '*', dealPhone = true) => {}
五、知识点
1.正则表达式
-
两种写法
- const reg =/正则表达式内容/参数
- const reg=newReg(‘正则表达式内容’,''参数")
-
参数:
- g :表示全局(global)模式,即模式将被应用于所有字符串,而非在发现第一个匹配项时立即停止;
- i :表示不区分大小写(case-insensitive)模式,即在确定匹配项时忽略模式与字符串的大小写;
- m :表示多行(multiline)模式,即在到达一行文本末尾时还会继续查找下一行中是否存在与模式匹配的项。
2.split方法
String split() 方法
- str.split() 方法将字符串拆分为子字符串数组。
- split() 方法返回新数组,不会更改原始字符串。
- 如果 (" ") 用作分隔符,则字符串在单词之间进行拆分
3.test方法
RegExp test() 方法
- reg.test() 方法测试字符串中的匹配项。
- 如果找到匹配项,则返回 true,否则返回 false。
4.match方法
String match() 方法
- str.match() 方法将字符串与正则表达式进行匹配。
- match() 方法返回包含匹配项的数组。
- 如果未找到匹配项,则 match() 方法返回 null。
- 如果找到了匹配项,则返回
['匹配文本'//该数组的第 0 个元素存放的是匹配文本index: 3,//index 属性声明的是匹配文本的起始字符在 string 中的位置input: 'uofjjflsjhahf废旧塑料ffjsljfs',//input 属性声明的是对 string 的引用。
]
以上说明适用于非全局匹配的正则表达式
如果 regexp 具有标志 g,则 match() 方法将执行全局检索,找到 string 中的所有匹配子字符串。若没有找到任何匹配的子串,则返回 null。如果找到了一个或多个匹配子串,则返回一个数组。不过全局匹配返回的数组的内容与前者大不相同,它的数组元素中存放的是 string 中所有的匹配子串,而且也没有 index 属性或 input 属性。
5.matchAll方法
String match() 方法
- 那么当我们需要全局匹配且需要获取index和input属性怎么办?可以使用mathchAll方法。
- matchAll() 方法返回一个包含所有匹配正则表达式的结果及其分组捕获组的迭代器
- 返回值:一个迭代器,可以使用for…of…,数组新增的扩展符(…)或Array.from()实现功能
注意:需要在正则表达式中写明全局匹配(g)否则会报错,以及注意要将返回值转化为数组
6.slice方法
Array slice() 方法
- slice() 方法以新的数组对象,返回数组中被选中的元素。
- slice() 方法选择从给定的 start 参数开始的元素,并在给定的 end 参数处结束,但不包括。(左闭右开)
注释:slice() 方法不会改变原始数组。
7.replace() 方法
String replace() 方法
- replace() 方法在字符串中搜索值或正则表达式。
- replace() 方法返回已替换值的新字符串。
- eplace() 方法不会更改原始字符串。
如果您替换值,则只会替换第一个实例。如需替换所有实例,请使用带有 g 修饰符集的正则表达式。
8.repeat方法
String repeat(count) 方法
str.repeat()方法示例:
let str ='*'
str=str.repeat(2)
console.log(str)//输出 **
- count:重复次数
- 不会改变原对象
六、答案
const toDesensitization = (str, rule, symbol = '*', dealPhone = true) => {//题目要求返回的数据格式let results = {ids: [],newStr: str,}//第一个参数不存在返回 null。if (!str) {return null}//第一个参数存在,第二个参数不存在,返回原字符串。if (str && !rule) return str//如果输入的是字符串类型的 那么将其转换为数组if (typeof rule === 'string') {//根据逗号分割字符串rule = rule.split(',')}//for of 循环遍历数组 取的是valuefor (let item of rule) {//正则表达式 全局匹配let reg = new RegExp(`${item}`, 'g')if (reg.test(str)) {//获取所有匹配的索引 将他们添加到ids[...str.matchAll(reg)].forEach((item) => {results.ids.push(item.index)})//注意:如果reg没有选择全局匹配 那么调用matchAll会报错//本来replace方法只能替换第一个匹配的字符串,但是如果正则表达式中设置了全局标志g,那么replace方法就会替换所有匹配的子字符串。results.newStr = results.newStr.replace(reg, symbol.repeat(item.length))}}if (dealPhone) {//手机号替换const reg = /1\d{10}/if (reg.test(str)) {let temp = str.match(reg)[0]temp = temp.slice(3, -3)results.newStr = results.newStr.replace(temp, symbol.repeat(temp.length))}}return results
}
相关文章:
javaScript 蓝桥杯----梅楼封的一天
目录一、介绍二、目标1.函数入参要求:2.出参要求:三、输出示例1.示例一2.示例二3.示例三4.示例四5.示例五四、待完善代码五、知识点1.正则表达式2.split方法3.test方法4.match方法5.matchAll方法6.slice方法7.replace() 方法8.repeat方法六、答案一、介绍…...

谷粒商城笔记+踩坑(18)——购物车
目录 一、环境搭建 1.1、购物车模块初始化 1.2、动静资源处理 1.3、页面跳转配置 二、数据模型分析 2.1、购物车需求 2.1.1、离线购物车和在线购物车需求、数据库选择redis 2.1.2、购物车数据结构 2.2、模型类抽取,Cart和CartItem 2.3、Redis依赖和配置、…...

进阶C语言:指针笔试题
在学习完进阶C指针之后,可以来做一些笔试题来进行提升、巩固,小编在这里给大家分享几道比较有意思的笔试题 目录 一、笔试题1: 二、笔试题2 三、笔试题3: 四、笔试题4: 五、笔试题5: 编辑 六、笔试题…...

基于SSM(jsp)的宿舍管理系统
带项目源码和数据库文件 MySQL 导入即可用 可作为毕设参考 框架:SSM 1.1功能需求 本系统的设计目的是为了让老师可以随时随地的关注学生的在校情情况,方便老师对学生在校情况的添加、修改、删除和查询,实时关注学生的安全问题。该系统能…...
Java Web应用开发——作业四
一.单项选择题(共3题,30.0分) 1 如何获取一个 Cookie[]( ) A、 request.getCookies() B、 request.getCookie() C、 response.getCookies() D、 response.getCookie() 正确答案: A 2 ( )隐…...

基于ASP的反垃圾邮件管理系统的设计与实现
随着Internet的迅速普及,电子邮件以其快捷、方便、低成本的特点逐渐成为人们进行信息交流的主要媒介之一,但是随之而来的垃圾邮件也越来越泛滥。垃圾邮件占用了有限的存储、计算和网络资源,耗费了用户大量的处理时间,影响和干扰了…...

2010年9月计算机二级JAVA笔试试题及答案
一、选择题(每小题2分,共70分) 下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的。请将正确选项填涂在答题卡相应位置上,答在试卷上不得分。 (1&…...

博客让谷歌或是百度收录
参考以下大佬的博客教程 Hexo框架(六):SEO优化及站点被搜索引擎收录设置 | 你真是一个美好的人类 第一步 安装百度和 Google 的站点地图生成插件: npm install hexo-generator-baidu-sitemap --save npm install hexo-generator-sitemap --save 然后来…...

机器学习分类算法评价指标
一. 分类评价指标 对机器学习算法的性能进行评估时,不仅需要有效可行的实验估计方法,还需要有衡量模型泛化能力的评价指标,这就是算法评价指标。分类算法的评价指标一般有准确率,精确率,召回率,F1-score&a…...

Socks5代理服务器示例详解
Go语言中变量的声明和JavaScript很像,使用var关键字,变量的声明、定义有好几种形式 变量和常量 // 声明并初始化一个变量 var m int 10 // 声明初始化多个变量 var i, j, k 1, 2, 3 // 多个变量的声明(注意小括号的使用) var(no intname string ) //…...
使用 Docker 和 Nginx 反向代理访问 ChatGPT API
在许多应用程序中,我们需要从一个外部服务中获取数据。然而,由于种种原因(例如跨域问题、API 访问限制等),我们可能无法直接从客户端访问这些服务。这时,反向代理可以成为我们的救星。在这篇文章中…...
[前端笔记038]vue2之vueRouter、elementUI
前言 本笔记参考视频,尚硅谷:BV1Zy4y1K7SH p117 - p135 相关理解 vue 的一个插件库,专门用来实现SPA 应用单页 Web 应用(single page web application,SPA),整个应用只有一个完整的页面点击页面中的导航…...
ChatGPT使用案例之操作Excel
ChatGPT使用案例之操作Excel 微软已经通过其官网宣布,正在将其基于GPT-4的人工智能(AI)技术植入到其Office办公软件当中,该功能名为“Microsoft 365 Copilot”。微软称其是基于大语言模型的下一代AI生产力技术,目前已经向部分商业用户开放。 Microsoft 365 负责人Jared …...

【算法基础】(二)数据结构 --- 单链表
✨个人主页:bit me ✨当前专栏:算法基础 🔥专栏简介:该专栏主要更新一些基础算法题,有参加蓝桥杯等算法题竞赛或者正在刷题的铁汁们可以关注一下,互相监督打卡学习 🌹 🌹 dz…...
STL容器之<multiset>
文章目录测试环境multiset介绍头文件模块类定义对象构造初始化元素访问元素插入和删除元素查找容器大小迭代器其他函数测试环境 系统:ubuntu 22.04.2 LTS 64位 gcc版本:11.3.0 编辑器:vsCode 1.76.2 multiset介绍 关联式容器。元素是唯一的…...
python实战应用讲解-【numpy专题篇】numpy常见函数使用示例(三)(附python示例代码)
目录 Python numpy.finfo()函数 Python Numpy MaskedArray.masked_less()函数 Python Numpy MaskedArray.masked_less_equal()函数 Python Numpy MaskedArray.masked_not_equal()函数 Python Numpy MaskedArray masked_outside()函数 Python Numpy MaskedArray.masked_wh…...
【Android笔记89】Android之全局加载框Gloading的使用
这篇文章,主要介绍Android之全局加载框Gloading的使用。 目录 一、Gloading全局加载框 1.1、Gloading介绍 1.2、Gloading运行效果 1.3、Gloading的使用...

php微信小程序java+Vue高校课程课后辅导在线教育系统nodejs+python
目 录 1绪论 1 1.1项目研究的背景 1 1.2开发意义 1 1.3项目研究现状及内容 5 1.4论文结构 5 2开发技术介绍 7 2.1 B/S架构 7 2.2 MySQL 介绍 7 2.3 MySQL环境配置 7 2.5微信小程序技术 8 3系统分析 9 3.1可行性分析 9 3.1.1技术可行性 9 3.1.2经济可行性 9 3.1.3操作可行性 10 …...

公司刚来的00后真卷,上班还没2年,跳到我们公司起薪20k....
都说00后躺平了,但是有一说一,该卷的还是卷。 这不,前段时间我们公司来了个00后,工作都没两年,跳槽到我们公司起薪18K,都快接近我了。后来才知道人家是个卷王,从早干到晚就差搬张床到工位睡觉了…...

Intel 处理器 macOS降级到Big Sur
1 创建可引导的 macOS 安装器 将移动硬盘作安装 Mac 操作系统的启动磁盘。 创建可引导安装器需要满足的条件 移动硬盘(格式化为 Mac OS 扩展格式),至少有 14GB 可用空间已下载 macOS Big Sur的安装器 2 下载 macOS macOS Big Sur安装器会…...

【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...

手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...

【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...
QT3D学习笔记——圆台、圆锥
类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...