如何屏蔽字符串以仅显示最后 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 是迭代字符
我只是尝试如下屏蔽字符串,但经过一些搜索和研究后我没有找到我想要的东西。
字符串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 是迭代字符