【问题标题】:How to masking textfield in Swift 4? [duplicate]如何在 Swift 4 中屏蔽文本字段? [复制]
【发布时间】:2019-03-22 09:33:50
【问题描述】:

我想在 textfield.text 中屏蔽电子邮件,但我只得到中间的值。我想从中间获取值到@gmail.com,如下例所示。

例如:

  1. 让 var = 12345678@gmail.com

输出 = ****5678@gmail.com

  1. 让 var = 123456789@gmail.com

输出 = ****56789@gmail.com

    let email = "123456789@gmail.com"

    let components = email.components(separatedBy: "@")

    let result = hideMidChars(components.first!) + "@" + components.last!

    print(result)

我得到的输出:****5****@gmail.com

我的期望:****56789@gmail.com

【问题讨论】:

  • 函数hideMidChars 的问题很明显。是你自己的功能吗?
  • 为什么this 不适合你?
  • 但在这种情况下,我只从文本的开头屏蔽到 @gmail 并除以 2。例如我有 8 个数字的 int:12345678@gmail.com 仅屏蔽 ****45678@ gmail.com 我有 10 个号码怎么样:1234567890@gmail.com 仅屏蔽 *****67890@gmail.com 我从 Api 获取数据,在该链接中我们可以添加位置屏蔽。从json怎么样,数据是随机的。所以我不能用那个
  • 您可以使用与@JoakimDanielson 指示的问题相同的答案。将硬编码的 5 更改为字符串长度的一半。

标签: swift textfield masking


【解决方案1】:

尝试扩展字符串协议并声明一个返回 .init(repeating: ,count): 的变量:

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

用法如下:

let email = "123456789@gmail.com"

print(email.masked)   //"••••••••••gmail.com"

如果您想要显示电子邮件的一部分,只需按如下方式操作后缀(count - 3):

return String(repeating: "•", count: Swift.max(0, count - count/2)) + suffix(count/2)

【讨论】:

    【解决方案2】:
    func hide(email: String) -> String {
    
        let parts = email.split(separator: "@")
        if parts.count < 2 {
            return email
        }
        let name = parts[0]
        let appendix = parts[1]
        let lenght = name.count
        if lenght == 1 {
            return "*@\(appendix)"
        }
        let semiLenght = lenght / 2
    
        var suffixSemiLenght = semiLenght
        if (lenght % 2 == 1) {
            suffixSemiLenght += 1
        }
    
        let prefix = String(repeating: "*", count: semiLenght)
        let lastPart = String(name.suffix(suffixSemiLenght))
    
        let result = "\(prefix)\(lastPart)@\(appendix)"
        return result
    }
    let email = "123456789@gmail.com"
    let result = hide(email: email)
    print(result)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-28
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      相关资源
      最近更新 更多