在java中屏蔽信用卡和引脚

时间:2015-08-24 10:52:07

标签: java regex string

需要使用正则表达式仅屏蔽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";

1 个答案:

答案 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的条件。