-2

以下は、現在サーバー ログに出力されているリクエスト文字列です。

PaymentRequest{Id=123456, type=CREDIT_CARD, creditCardDetails=CreditCardDetails{type=VISA, name=Some Name, number=1234567890123456, expiry=0316, CCV=000}, directDebitDetails=null}

上記のリクエストの数値フィールドのマスクを作成して、ログに出力されたときに 123456789012--HIDDEN-- (最後の 4 桁が「HIDDEN」に置き換えられます) のようになるようにします。

以下の状況を確実に処理するために作成する Java 正規表現は何ですか?

  • [field=value] の場合、つまり number=1234567890123456 が文字列にありません。
  • クレジット カード番号は、0 ~ 16 の任意の長さです。たとえば、number= OR number=0 または number=10 または number=1234567890123456 です。
  • number が 4 未満の場合、最終出力は number=--HIDDEN-- になります。
  • number が存在しない場合、つまり number= の場合は何もしません。
  • number=1234567890123456 は、中間にある可能性があります。
4

2 に答える 2

2

1行のコードを使用してこれを行うことができます。方法を理解するのに少し時間がかかりましたが、結果は次のとおりです。

String input = "PaymentRequest{Id=123456, type=CREDIT_CARD, creditCardDetails=CreditCardDetails{type=VISA, name=Some Name, number=1234567890123456, expiry=0316, CCV=000}, directDebitDetails=null}"
String result = inputString.replaceAll("(?=number=\\d{1,16},)(number=\\d*?)\\d{1,4},", "$1--HIDDEN--,");
System.out.println(result);

問題がある場合はお知らせください。

于 2013-08-13T15:05:25.987 に答える