是否有正则表达式来掩盖动态字母数字字符串的中间区域?

Posted

技术标签:

【中文标题】是否有正则表达式来掩盖动态字母数字字符串的中间区域?【英文标题】:Is there a regex to mask middle areas of a dynamic alphanumeric string? 【发布时间】:2021-11-28 21:39:48 【问题描述】:

我正在尝试屏蔽一些机密信息,这些信息可以是任何字母数字字符串,例如。

示例 1

屏蔽前 - PMGKJGFWB125 掩蔽后 - PMG******125

示例 2

遮罩前 - 19000 屏蔽后 - 1**00

我在 C# 中尝试过这样的事情

Regex.Replace(s, @"\d(?!\d0,3$)", "*")

字符串的长度可能会有所不同,因此我们无法添加硬编码的偏移量。

我能得到一些帮助吗?

提前致谢

【问题讨论】:

我在您的示例中看不到任何类型的模式。好像您只是选择了随机块来 * out。你能更好地解释正则表达式必须匹配的内容吗? 你到底想要达到什么目的? 另外,您使用的是 C#(如代码所示)还是 javascript?它们不是一回事。 【参考方案1】:

看起来,粗略地说,你想把你的绳子分成四等分,然后把中间的两等分出来

不要太技术性..

var str = "PMGKJGFWB125".ToCharArray();

for(int x = str.Length/4; x < str.Length*3/4; x++)
  str[x] = '*';

return new string(str);

您可以针对不同长度的字符串调整 4,例如如果您的字符串为 6 或更少,则可能执行 3 而不是 4.. 等等

如果您希望它作为 LINQ,则为“WTH 是这样吗?!”笑:

(int f, int t) = (str.Length/4, str.Length*3/4);
return string.Concat(str.Select((c,i)=>f<i&&i<t?'*':c)));

【讨论】:

以上是关于是否有正则表达式来掩盖动态字母数字字符串的中间区域?的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式用于掩盖除Java中前两位数字之外的字符

用正则表达式验证只能有数字

正则表达式验证密码必须由大小写字母、数字、特殊字符组成

正则表达式匹配非零前缀数字 *OR* 字母数字

ChatGTP,生成正则表达式-至少包含一个大小写字母和数字且有位数限制

ChatGTP,生成正则表达式-至少包含一个大小写字母和数字且有位数限制