regex - 用于屏蔽数据的正则表达式
问题描述
我正在尝试为敏感数据的 JSON 响应实现正则表达式。
JSON 响应带有 AccountNumber 和 AccountName。
掩蔽细节如下。
accountNumber Before: 7835673653678365
accountNumber Masked: 783567365367****
accountName Before : chris hemsworth
accountName Masked : chri* *********
如果我只是这样做,我可以匹配上面的[0-9]{12}
内容(?![0-9]{12})
,当我替换它时,它只替换为 *,但我的正则表达式没有产生正确的输出。
如何从正则表达式生成上述输出?
解决方案
如果你[0-9]{12}
直接用一个星号匹配并替换它,你就剩下accountNumber Before: *8365
没有列出编程语言,但是替换末尾数字的一种选择是使用正向后视来断言左侧是 12 位,然后是正向前瞻来断言右侧是 0+ 数字在字符串的末尾。
然后在更换使用*
如果 json 的值与以下 2 个表达式的值完全相同,则chris hemsworth
可以7835673653678365
省略正向前瞻(?=\d*$)
和(?=[\w ]*$)
断言字符串的结尾。
如果要匹配的数据位于字符串的末尾并且字符串包含更多数据,则使用具有正向前瞻的版本,这样您就不会替换比预期更多的匹配项。
(?<=[0-9]{12})(?=\d*$)\d
在 Java 中:
(?<=[0-9]{12})(?=\\d*$)\\d
(?<=[0-9]{12})
正面向后看,断言左边是 12 位数字(?=\d*$)
正向前瞻,断言右边是 0+ 位并断言字符串的结尾\d
匹配单个数字
结果:
783567365367****
对于帐户名称,您可以使用 4 个单词字符来执行此操作,\w
但这也会用星号替换空格,因为我相信您不能在一个正则表达式中跳过匹配该空格。
(?<=[\w ]{5})(?=[\w ]*$)[\w ]
在 Java 中
(?<=[\\w ]{4})(?=[\\w ]*$)[\\w ]
结果
克里斯***********
推荐阅读
- powerbi - 如何计算 Power BI 中时间列中接收数据的频率?
- c++ - 如何优化 C++ 中两个节点之间的这个图/树问题计数距离?
- python - 如何只增加每个图像一次并将其保存在目录中?
- spring-data - Spring data r2dbc blob - Blob 数据处理
- python - 当满足 if 语句时,如何“继续”最外层的 for 循环?
- ruby-on-rails - 在 ubuntu18.04 虚拟机上的 railsv5.0.7.2 上使用 rubyv2.5.9 设置 PostgreSQL 时出现问题
- r - 如何在 R 中从 Github 加载 .stan 文件
- flutter - 从最后一天开始,在颤动的 dio 客户端中出现错误
- javascript - iframe 不显示嵌入页面的所有元素
- clojurescript - 书中的 ClojureScript 设置