在Swift 4中屏蔽/混淆电子邮件和电话号码的最佳方法是什么?
E.g。车削:
<a [routerLink]="['/iphone','iphone6s']" component: ItemComponent>iPhone 6S</a>
<a [routerLink]="['/electronics','laptops']" component: ProductsComponent>Laptops</a>
加入satheesmk2@gmail.com
sa******k2@gmail.com
加入9876543212
答案 0 :(得分:0)
基本上,你可以使用这样的功能。它隐藏了所有的字符,尽管领先和尾随两个字符:
func hideMidChars(_ value: String) -> String {
return String(value.enumerated().map { index, char in
return [0, 1, value.count - 1, value.count - 2].contains(index) ? char : "*"
})
}
请注意,对于非常短的输入字符串,目前没有特殊处理。
将此功能用于电话号码应该是微不足道的;至于电子邮件,如果你只想隐藏第一部分,你可以使用以下代码:
let email = "123456@test.com"
let components = email.components(separatedBy: "@")
let result = hideMidChars(components.first!) + "@" + components.last!
result
常量将为12**56@test.com
。
这当然假设电子邮件的格式有效,否则强行解包第一个和最后一个数组组件可能会崩溃。但是,处理这个问题超出了这个问题的范围。
答案 1 :(得分:0)
扩展字符串{
var maskEmail: String {
let email = self
let components = email.components(separatedBy: "@")
var maskEmail = ""
if let first = components.first {
maskEmail = String(first.enumerated().map { index, char in
return [0, 1, first.count - 1, first.count - 2].contains(index) ?
char : "*"
})
}
if let last = components.last {
maskEmail = maskEmail + "@" + last
}
return maskEmail
}
var maskPhoneNumber: String {
return String(self.enumerated().map { index, char in
return [0, 3, self.count - 1, self.count - 2].contains(index) ?
char : "*"
})
}
}