需要使用正则表达式仅屏蔽14位数的信用卡号码和PIN码
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Mask{
static String text="+919913623683,,,,1,2,,,4328798712363938,,,,5673,,7,8";
public static void main(String[] args){
System.out.println(replaceCreditCardNumber(text));
}
public static String replaceCreditCardNumber(String text){
String result = text.replaceAll("(\\d{16}(\\b([0-9]{4})[0-9]{0,9}([0-9]{4})\\b))", "$1--HIDDEN--,");
return result;
}
}
输入:
String text="+919913623683,,,,1,2,,,4328798712363938,,,,5673,,7,8";
输出:
data="+919913623683,,,,1,2,,,************3988,,,,****,,7,8";
答案 0 :(得分:0)
一个简单的&使用链式replaceAll
调用的丑陋示例看起来像(注意这里的顺序很重要):
String text="+919913623683,,,,1,2,,,4328798712363938,,,,5673,,7,8";
System.out.println(
text
// | not preceded by digit
// | | 4 digits
// | | | not followed by digit
// | | | | replace with literal ****
.replaceAll("(?<=\\D)\\d{4}(?=\\D)", "****")
// | 12 digits
// | | followed by 4 digits
// | | | replace with literal 12 *s
.replaceAll("\\d{12}(?=\\d{4})", "************")
);
<强>输出强>
+919913623683,,,,1,2,,,************3938,,,,****,,7,8
如前所述,您需要先进行第一次replaceAll
调用。
否则,您最终会使用&#34; * s&#34;替换完整的16位数字块,因为它将匹配4位数replaceAll
的条件。