Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java正则表达式-掩码信用卡号_Java_Regex_String - Fatal编程技术网

Java正则表达式-掩码信用卡号

Java正则表达式-掩码信用卡号,java,regex,string,Java,Regex,String,我有一个在字符串中屏蔽信用卡号码的功能: public static String replaceCreditCardNumber(String text){ final String MASKCARD = "$1<MASKED>$2"; final Pattern PATTERNCARD = Pattern.compile("([0-9]{4})[0-9]{0,9}([0-9]{4})");

我有一个在字符串中屏蔽信用卡号码的功能:

  public static String  replaceCreditCardNumber(String text){
         final String MASKCARD = "$1<MASKED>$2";
         final Pattern PATTERNCARD = 
            Pattern.compile("([0-9]{4})[0-9]{0,9}([0-9]{4})");    
         Matcher matcher = PATTERNCARD.matcher(text);
         if (matcher.find()) {
             return   matcher.replaceAll(MASKCARD);
         }
         return text;

    }
我要走了

        aaa=1gfg23fgfg4567[<MASKED>]3456
aaa=1GFG23FG4567[]3456
我的正则表达式缺少什么?

基于示例:

Pattern.compile("([0-9]{4})[0-9]{8}([0-9]{4})");

您应该使用单词边界来确保避免匹配不需要的输入:

final Pattern PATTERNCARD = 
        Pattern.compile("\\b([0-9]{4})[0-9]{0,9}([0-9]{4})\\b"); 

我希望为您服务

我有以下课程:

    public class PatternCreditCard {

  // ------------------------- PATTERN DEFINE TYPE CREDIT --------------------------- //
  public static final String VISA = "^4.*";
  public static final String VISA_ELECTRON = "^(4026|417500|4508|4844|491(3|7)).*";
  public static final String MASTER_CARD = "^5[1-5].*";
  public static final String AMEX = "^3[47].*";
  public static final String DISCOVER =
      "^(6011|622(12[6-9]|1[3-9][0-9]|[2-8][0-9]{2}|9[0-1][0-9]|92[0-5]|64[4-9])|65).*";
  public static final String DINERS = "^36.*";
  public static final String DINERS_CARTE_BLANCHE = "^30[0-5].*";
  public static final String JCB = "^35(2[89]|[3-8][0-9]).*";

  // ------------------------- PATTERN SEPARATOR GROUP NUMBERS --------------------------- //
  public static final String VISA_SEPARATOR =
      "^([0-9 ]{5})([0-9 ]{5})?([0-9 ]{5})?(?:([0-9 ]{5})([0-9 ]{5})?([0-9]{5})([0-9]{4}))?$";

  public static final String MASTER_CARD_SEPARATOR =
      "^([0-9 ]{5})([0-9 ]{5})?([0-9 ]{5})?(?:([0-9 ]{5})([0-9 ]{5})?([0-9]{5})([0-9]{4}))?$";

  public static final String AMEX_SEPARATOR =
      "^([0-9 ]{5})([ ]?[0-9 ]{7})?(?:([ ]?[0-9 ]{7})([ ]?[0-9]{5}))?$";

  public static final String DISCOVER_SEPARATOR =
      "^([0-9 ]{5})([0-9 ]{5})?([0-9 ]{5})?(?:([0-9 ]{5})([0-9 ]{5})?([0-9]{5})([0-9]{4}))?$";

  // ------------------------- LENGTH PERMITTED FOR CREDIT CARD --------------------------- //
  public static final int VISA_LEN = 16;
  public static final int MASTER_CARD_LEN = 16;
  public static final int AMEX_LEN = 15;
  public static final int DISCOVER_LEN = 16;

}
然后,如果返回值为“”(空),则替换信用卡号的字符串:表示该字符串符合正则表达式中的任何组

cardNumber.replaceAll(VISA_SEPARATOR, " ");

为什么中间有<代码> [09] {0},9} < /代码>?信用卡号码不是总是16位数吗?你要的是4位数,然后是9位数,再加上4位数——这就是“失败”案例中的情况。因此,中间的5位数字被替换。你需要有8个数字才能被屏蔽吗?@Keppli-不是真的-他们也可以有14个(食客俱乐部)或15个(美国运通)。有些签证甚至有13张。是一个资源,其中包括对信用卡/借记卡的一些建议regexes@Vld:好的,那么
[0-9]{5,8}
可能更有意义。
    public class PatternCreditCard {

  // ------------------------- PATTERN DEFINE TYPE CREDIT --------------------------- //
  public static final String VISA = "^4.*";
  public static final String VISA_ELECTRON = "^(4026|417500|4508|4844|491(3|7)).*";
  public static final String MASTER_CARD = "^5[1-5].*";
  public static final String AMEX = "^3[47].*";
  public static final String DISCOVER =
      "^(6011|622(12[6-9]|1[3-9][0-9]|[2-8][0-9]{2}|9[0-1][0-9]|92[0-5]|64[4-9])|65).*";
  public static final String DINERS = "^36.*";
  public static final String DINERS_CARTE_BLANCHE = "^30[0-5].*";
  public static final String JCB = "^35(2[89]|[3-8][0-9]).*";

  // ------------------------- PATTERN SEPARATOR GROUP NUMBERS --------------------------- //
  public static final String VISA_SEPARATOR =
      "^([0-9 ]{5})([0-9 ]{5})?([0-9 ]{5})?(?:([0-9 ]{5})([0-9 ]{5})?([0-9]{5})([0-9]{4}))?$";

  public static final String MASTER_CARD_SEPARATOR =
      "^([0-9 ]{5})([0-9 ]{5})?([0-9 ]{5})?(?:([0-9 ]{5})([0-9 ]{5})?([0-9]{5})([0-9]{4}))?$";

  public static final String AMEX_SEPARATOR =
      "^([0-9 ]{5})([ ]?[0-9 ]{7})?(?:([ ]?[0-9 ]{7})([ ]?[0-9]{5}))?$";

  public static final String DISCOVER_SEPARATOR =
      "^([0-9 ]{5})([0-9 ]{5})?([0-9 ]{5})?(?:([0-9 ]{5})([0-9 ]{5})?([0-9]{5})([0-9]{4}))?$";

  // ------------------------- LENGTH PERMITTED FOR CREDIT CARD --------------------------- //
  public static final int VISA_LEN = 16;
  public static final int MASTER_CARD_LEN = 16;
  public static final int AMEX_LEN = 15;
  public static final int DISCOVER_LEN = 16;

}
cardNumber.replaceAll(VISA_SEPARATOR, " ");