如何在C#中使用正则表达式实现IBAN号码的掩码处理
在C#中用正则实现IBAN掩码处理
要实现你需要的IBAN掩码规则,核心是通过正则捕获关键分段,再动态替换中间部分为星号。具体实现如下:
正则匹配逻辑
我们需要精准匹配IBAN的五个关键分段:
- 开头2个国家代码字母(原样保留)
- 紧随其后的任意5个字符(替换为5个
*) - 接下来的5个数字(原样保留)
- 中间过渡的所有字符(替换为对应数量的
*) - 结尾的3个数字(原样保留)
对应的正则表达式:
^([A-Z]{2}).{5}(\d{5})(.*)(\d{3})$
^([A-Z]{2}):捕获开头2个字母(忽略大小写,兼容输入的小写字母).{5}:匹配接下来的5个任意字符(后续统一替换为*****)(\d{5}):捕获接下来的5个数字(.*):捕获中间所有剩余字符(直到最后3个数字前)(\d{3})$:捕获结尾的3个数字
C# 代码实现
使用Regex.Replace结合匹配器委托,动态生成对应长度的星号:
using System; using System.Text.RegularExpressions; public static class IbanMasker { public static string MaskIban(string iban) { if (string.IsNullOrWhiteSpace(iban)) return iban; var ibanRegex = new Regex(@"^([A-Z]{2}).{5}(\d{5})(.*)(\d{3})$", RegexOptions.IgnoreCase); return ibanRegex.Replace(iban, match => { // 把中间过渡部分的每个字符替换为* string middleAsterisks = new string('*', match.Groups[3].Length); // 拼接最终掩码结果 return $"{match.Groups[1].Value.ToUpper()}*****{match.Groups[2].Value}{middleAsterisks}{match.Groups[4].Value}"; }); } // 测试示例 public static void Main() { string germanIban = "DE12500123456789012345"; string belgianIban = "BE12345123456345"; Console.WriteLine(MaskIban(germanIban)); // 输出: DE*****12345*******345 Console.WriteLine(MaskIban(belgianIban)); // 输出: BE*****12345*345 } }
额外说明
- 大小写兼容:通过
RegexOptions.IgnoreCase允许输入的IBAN字母为小写,输出自动转为大写国家代码 - 自适应长度:中间星号数量根据原IBAN长度自动计算,适配不同国家的IBAN长度差异
- 完整匹配:正则的
^和$确保匹配整个IBAN字符串,避免部分匹配导致的错误
内容的提问来源于stack exchange,提问作者Vito
相关产品推荐
相关产品推荐

