使用正则表达式屏蔽信用卡号

Sjv*_*333 7 java regex

我正在尝试屏蔽 CC 编号,以一种不屏蔽第三个字符和最后三个字符的方式。

对于如..7108898787654351**0**********351

我试过了(?<=.{3}).(?=.*...)。它揭露了最后三个字符。但它也揭露了前三个。

你能指出一些关于如何单独揭开第三个字符的提示吗?

anu*_*ava 8

您可以将此正则表达式与前瞻和后瞻一起使用:

str = str.replaceAll("(?<!^..).(?=.{3})", "*");
//=> **0**********351
Run Code Online (Sandbox Code Playgroud)

正则表达式演示

正则表达式详情:

  • (?<!^..):否定前瞻断言我们在开始后没有 2 个字符(从匹配中排除第 3 个字符)
  • .: 匹配一个字符
  • (?=.{3}): 正向前瞻断言我们前面至少有 3 个字符


And*_*ner 7

我建议正则表达式不是做到这一点的唯一方法。

char[] m = new char[16];  // Or whatever length.
Arrays.fill(m, '*');
m[2] = cc.charAt(2);
m[13] = cc.charAt(13);
m[14] = cc.charAt(14);
m[15] = cc.charAt(15);
String masked = new String(m);
Run Code Online (Sandbox Code Playgroud)

它可能更冗长,但它比正则表达式更具可读性(和可调试性)。