如何屏蔽字符串以仅显示最后 3 个字符?

How to mask a String to show only the last 3 characters?

我只是尝试如下屏蔽字符串,但经过一些搜索和研究后我没有找到我想要的东西。

字符串a = "0123456789" 蒙面 = "xxxxxxx789"

我修改了这个问题的解决方案,但它只是更改了与模式不匹配的字符串。我不知道如何更改模式以符合我的意思。

谁想要在 obj C 中使用这个,可以使用这个

    NSString *phone = @"0123456789";

    NSString *lastChr = [phone substringFromIndex: [phone length] - 3];

    NSMutableString *mask = [[NSMutableString alloc]init];

    for (int i=0; i<[phone length]-3; i++) {
        [mask appendString:@"*"];

    }
    [mask appendString:lastChr];

您可以使用收集方法 suffix(_ maxLength: Int) 获取字符串的最后 3 个字符,并重复 "x":

填充字符串的另一部分

edit/update

Swift 4 或更高版本

extension StringProtocol {
    var masked: String {
        return String(repeating: "•", count: Swift.max(0, count-3)) + suffix(3)
    }
}

let string = "0123456789"
print(string.masked)   // "•••••••789\n"

这正是您想要的:

let name = "0123456789"
let conditionIndex = name.characters.count - 3
let maskedName = String(name.characters.enumerated().map { (index, element) -> Character in
    return index < conditionIndex ? "x" : element
})
print("Masked Name: ", maskedName) // xxxxxxx789

这里发生的是你使用 enumerated() 方法得到字符串的字符数组,然后根据条件将每个字符映射到一个值:

  • 如果字符的索引小于 condtionIndex,我们用 x(掩码)替换字符。
  • 否则,我们就让角色保持原样。

我用的就是这个,很简单:

var pan: String?
var maskedPan: String { return pan.enumerated().map({ return ([=10=] < 6 || [=10=] > 11) ? String() : "*" }).joined()}

其中 $0 是索引,$1 是迭代字符