求助:Java正则表达式实现字母数字代码的*掩码功能
字母数字代码掩码正则解决方案
需求回顾
需要实现字母数字代码的掩码处理,规则如下:
- 保留所有前导零
- 保留前4个非零字符
- 保留最后4个字符
- 中间部分替换为
*
之前使用的正则(?<=[^0].{3})\w+(?=\w{4})无法处理字符串中间包含0的情况。
可行正则及实现
正则表达式
(^0*)([1-9A-Za-z]\w{3})(.*)(\w{4}$)
替换逻辑
借助支持回调替换的语言(如JavaScript、Python),将中间匹配到的部分替换为对应长度的*:
JavaScript示例
const maskCode = (code) => { return code.replace(/(^0*)([1-9A-Za-z]\w{3})(.*)(\w{4}$)/, (_, p1, p2, p3, p4) => { return `${p1}${p2}${'*'.repeat(p3.length)}${p4}`; }); };
Python示例
import re def mask_code(code): def replace_func(match): p1, p2, p3, p4 = match.groups() return f"{p1}{p2}{'*' * len(p3)}{p4}" return re.sub(r'(^0*)([1-9A-Za-z]\w{3})(.*)(\w{4}$)', replace_func, code)
验证示例
| 输入 | 输出 |
|---|---|
0001113033AA55608981 | 0001113*********8981 |
23456237472347823923 | 2345************3923 |
00000000090000000000 | 0000000009000***0000 |
09008000800060050000 | 09008***********0000 |
AAAABBBBCCCCDDDDEEEE | AAAA************EEEE |
0000BBBBCCCCDDDDEEEE | 0000BBBB********EEEE |
正则拆解
^0*:匹配开头所有连续的前导零,存入分组1[1-9A-Za-z]\w{3}:匹配第一个非零字母数字字符,再紧跟3个任意字母数字,即前4个有效非零字符,存入分组2.*:匹配中间所有需要掩码的字符,存入分组3\w{4}$:匹配结尾的4个字母数字字符,存入分组4
替换时用*填充分组3的长度,再拼接所有分组即可满足需求。
内容的提问来源于stack exchange,提问作者rafarods
相关产品推荐
相关产品推荐

