如何在Swift中使用正则表达式实现银行卡号掩码,仅显示前6位后2位
Swift 银行卡号正则掩码实现方案
实现逻辑
- 用正则表达式分组捕获银行卡号的前6位、中间段、末尾2位
- 将中间段替换为等长度的
*字符 - 扩展String类型封装方法,降低调用成本
完整实现代码
首先是String扩展封装:
import Foundation extension String { /// 银行卡号掩码,仅保留前6位和最后2位,中间替换为* func mask() -> String { // 正则匹配规则:三个分组分别对应前6位、中间段、末尾2位 guard let regex = try? NSRegularExpression(pattern: "^(.{6})(.*)(.{2})$", options: []) else { return self } let fullRange = NSRange(location: 0, length: utf16.count) guard let result = regex.firstMatch(in: self, range: fullRange) else { // 长度不足8位的异常场景,可按需调整返回规则 return self } let prefix = (self as NSString).substring(with: result.range(at: 1)) let suffix = (self as NSString).substring(with: result.range(at: 3)) let starCount = result.range(at: 2).length return prefix + String(repeating: "*", count: starCount) + suffix } }
调用示例
let cardNumber: String = "5890040000000016" print("Output: ", cardNumber.mask()) // 输出:589004********16
如果你需要保留示例中传入正则参数的调用形式,只需要把方法参数调整为接收pattern字符串,内部动态生成NSRegularExpression实例即可,固定掩码规则的场景下直接封装专用方法易用性更高。
内容的提问来源于stack exchange,提问作者Kaan Ozdemir
相关产品推荐
相关产品推荐

