当前位置:首页 > 文章列表 > 文章 > 前端 > 使用正则表达式对 JSON 字符串中的敏感字段进行脱敏,可以按照以下步骤操作:✅ 1. 确定需要脱敏的字段例如:"password", "phone", "id" 等。✅ 2. 编写正则表达式匹配字段假设 JSON 格式为:{ "username": "admin", "password": "123456", "phone": "13800000000" }目标是将 password

使用正则表达式对 JSON 字符串中的敏感字段进行脱敏,可以按照以下步骤操作:✅ 1. 确定需要脱敏的字段例如:"password", "phone", "id" 等。✅ 2. 编写正则表达式匹配字段假设 JSON 格式为:{ "username": "admin", "password": "123456", "phone": "13800000000" }目标是将 password

2026-05-13 22:51:28 0浏览 收藏
本文深入探讨了如何在不解析JSON结构的前提下,安全高效地使用正则表达式对原始JSON字符串中的敏感字段(如password、phone、idCard、email等)进行精准脱敏,既适用于日志预处理、网关过滤等轻量场景,又通过惰性匹配、多类型值识别、注释预清理、转义字符兼容及格式保留等关键技巧规避常见陷阱,帮助开发者在兼顾性能与安全的同时,避免误匹配、格式破坏和数据泄露风险。

如何利用正则表达式实现对原始 JSON 字符串中敏感字段的正则脱敏

直接对原始 JSON 字符串(未解析为对象)用正则表达式脱敏,是可行但需谨慎的方案——适用于无法或不希望解析 JSON 的轻量场景(如日志预处理、网关层快速过滤),但必须避开 JSON 结构陷阱(如嵌套、引号转义、字段名重复等)。核心思路是:**精准匹配键名 + 安全捕获值 + 保留原始格式**。

识别敏感字段的键值对模式

不能简单写 "phone": "138...",因为 JSON 中键名和值可能跨行、含空格、有转义引号。推荐使用惰性匹配 + 带边界的模式:

  • 基础结构"\s*(phone|idCard|email|password)\s*"\s*:\s*("([^"\\]|\\.)*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+-]?\d+)?)
  • 说明:匹配双引号包裹的敏感键名(忽略周围空白),冒号后允许空白,再匹配字符串(支持转义)、布尔、null 或数字;用非贪婪 [^"\\]* 防止跨字符串误匹配
  • 注意:不匹配单引号 JSON(非标准),也不处理键名带转义(如 "\"phone\""),这类极少,若存在需前置预清理

对不同值类型执行差异化脱敏

值的类型决定脱敏方式,正则需分组捕获并判断:

  • 字符串值(第3组匹配内容):保留开头2位 + "****" + 末尾1位(如 "138****0001");邮箱可留用户名首尾+域名("u***@domain.com"
  • 数字/布尔/null:数字可替换为 0***;布尔统一为 false;null 保持不变或替为 null
  • 实现提示:在 replace 回调中用 if (match[3]) {...} 判断是否为字符串,避免误脱敏数字

规避 JSON 结构风险的关键细节

原始字符串操作易出错,以下三点必须处理:

  • 跳过注释与字符串内内容:JSON 标准无注释,但实际日志中可能出现 ///* */。若存在,需先移除注释(用正则 /\/\*[\s\S]*?\*\/|\/\/.*/g),否则可能把注释里的 "phone" 当成字段脱敏
  • 防止匹配到值中的键名:例如 "content": "user phone: 138..."。通过要求键名前后必须是 " + 空白 + :(即 "\s*key\s*"\s*:)来降低误伤
  • 保留原始缩进与换行:replace 时用 $&(整个匹配)做占位,只替换值部分,确保 JSON 格式不变,利于后续解析或展示

一个可用的 JavaScript 示例

以脱敏 phoneidCardemail 为例:

const sensitiveKeys = ['phone', 'idCard', 'email'];
const pattern = new RegExp(
  '"\\s*(' + sensitiveKeys.join('|') + ')\\s*"' +      // 匹配键
  '\\s*:\\s*' +                                        // 冒号及空格
  '(' +                                                // 值(捕获组2)
    '"([^"\\\\]|\\\\.)*"' +                            // 字符串(支持转义)
    '|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+-]?\\d+)?' + // 其他字面量
  ')',
  'g'
);
<p>function desensitizeJSON(jsonStr) {
return jsonStr.replace(pattern, (match, key, value) => {
if (value.startsWith('"')) {
const inner = value.slice(1, -1); // 去掉引号
let masked;
if (key === 'phone') masked = inner.length > 4 ? inner.substring(0, 3) + '<strong><strong>' + inner.slice(-1) : '</strong></strong>';
else if (key === 'idCard') masked = inner.length > 16 ? inner.substring(0, 4) + '<strong>****</strong>' + inner.slice(-4) : '<strong>****</strong>';
else if (key === 'email') {
const [user, domain] = inner.split('@');
masked = user ? (user[0] + '<strong><em>@' + (domain || '')) : '</em></strong>@<strong><em>';
}
return <code>"${key}": "${masked}"</code>;
}
return `"${key}": "</em></strong>"`; // 非字符串值统一掩码
});
}</p>

理论要掌握,实操不能落!以上关于《使用正则表达式对 JSON 字符串中的敏感字段进行脱敏,可以按照以下步骤操作:✅ 1. 确定需要脱敏的字段例如:"password", "phone", "id" 等。✅ 2. 编写正则表达式匹配字段假设 JSON 格式为:{ "username": "admin", "password": "123456", "phone": "13800000000" }目标是将 password 和 phone 脱敏为 **** 或 ***。✅ 3. 正则表达式示例(以 Python 为例)a. 匹配 password 字段import re json_str = '{"username": "admin", "password": "123456", "phone": "13800000000"}' # 替换 password 字段 pattern_password = r'"password"\s*:\s*"([^"]*)"' replaced_json = re.sub(pattern_password, r'"password": "***"', json_str)b. 匹配 phone 字段 pattern_phone = r'"phone"\s*:\s*"([^"]*)"' re》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

HTML5转APP能读NFC吗?NFC接入教程HTML5转APP能读NFC吗?NFC接入教程
上一篇
HTML5转APP能读NFC吗?NFC接入教程
Starship配置Terraform工作区显示方法
下一篇
Starship配置Terraform工作区显示方法
查看更多
最新文章
资料下载
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • ChatExcel酷表:告别Excel难题,北大团队AI助手助您轻松处理数据
    ChatExcel酷表
    ChatExcel酷表是由北京大学团队打造的Excel聊天机器人,用自然语言操控表格,简化数据处理,告别繁琐操作,提升工作效率!适用于学生、上班族及政府人员。
    4514次使用
  • Any绘本:开源免费AI绘本创作工具深度解析
    Any绘本
    探索Any绘本(anypicturebook.com/zh),一款开源免费的AI绘本创作工具,基于Google Gemini与Flux AI模型,让您轻松创作个性化绘本。适用于家庭、教育、创作等多种场景,零门槛,高自由度,技术透明,本地可控。
    4865次使用
  • 可赞AI:AI驱动办公可视化智能工具,一键高效生成文档图表脑图
    可赞AI
    可赞AI,AI驱动的办公可视化智能工具,助您轻松实现文本与可视化元素高效转化。无论是智能文档生成、多格式文本解析,还是一键生成专业图表、脑图、知识卡片,可赞AI都能让信息处理更清晰高效。覆盖数据汇报、会议纪要、内容营销等全场景,大幅提升办公效率,降低专业门槛,是您提升工作效率的得力助手。
    4742次使用
  • 星月写作:AI网文创作神器,助力爆款小说速成
    星月写作
    星月写作是国内首款聚焦中文网络小说创作的AI辅助工具,解决网文作者从构思到变现的全流程痛点。AI扫榜、专属模板、全链路适配,助力新人快速上手,资深作者效率倍增。
    6589次使用
  • MagicLight.ai:叙事驱动AI动画视频创作平台 | 高效生成专业级故事动画
    MagicLight
    MagicLight.ai是全球首款叙事驱动型AI动画视频创作平台,专注于解决从故事想法到完整动画的全流程痛点。它通过自研AI模型,保障角色、风格、场景高度一致性,让零动画经验者也能高效产出专业级叙事内容。广泛适用于独立创作者、动画工作室、教育机构及企业营销,助您轻松实现创意落地与商业化。
    5102次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码