【发布时间】:2023-03-28 15:50:01
【问题描述】:
这是我当前正在服务器日志中打印的请求字符串。
PaymentRequest{Id=123456, type=CREDIT_CARD, creditCardDetails=CreditCardDetails{type=VISA, name=Some Name, number=1234567890123456, expiry=0316, CCV=000}, directDebitDetails=null}
我想为上述请求中的数字字段创建一个掩码,以便当它在日志中打印时看起来像 123456789012--HIDDEN--(最后 4 位数字替换为“隐藏”)。
要创建什么 Java 正则表达式,以便它能够稳健地处理以下情况?
- 如果 [field=value] 即 number=1234567890123456 在 字符串。
- 信用卡号可以是 0 到 16 之间的任意长度,例如 number= OR number=0 或 number=10 或 number=1234567890123456。
- 如果 number 小于 4,则最终输出为 number=--HIDDEN--
- 如果 number 不存在,即 number=,则什么也不做。
- number=1234567890123456 可能在中间,例如..., name=Some Name, number=1234567890123456}, ... 或者最后例如..., number=1234567890123456, name=Some Name}, ...
【问题讨论】:
-
@Kaizar : 当数字为空或包含少于 4 个字符时该怎么办?
-
@blackSmith 什么都不做,我考虑的目的是,如果是这种情况,它不应该抛出异常。
-
你的意思是从长度1到16?
-
@Sniffer 不,0 到 16,我刚刚更正了。感谢您的澄清。
-
那么如果数字小于四位数,那么要屏蔽或隐藏什么?
标签: regex logging credit-card masking