在Swift 4中屏蔽电子邮件和电话号码

时间:2018-03-11 15:30:56

标签: swift

在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

2 个答案:

答案 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 : "*"
    })
     }

}