需要一个正则表达式来创建无法识别的电子邮件地址,如
- 如果用户名(@之前)小于8个字符,则使用*(*)将长度改为8
- 只显示前3个字符,其余掩码使用开始(*)
- 如果用户名少于3个字符,显示第一个字符,并使长度为8 *
。
test123456789@gmail.com -> tes**********@gmail.com
test1@gmail.com -> tes*****@gmail.com // make length to 8
tes@gmail.com -> t*******@gmail.com // make length to 8
谁能建议上面
的正则表达式?我认为regex对于这种类型的问题有点过分,这里是我很快想到的解决方案,只是分割字符串并检查用户名长度。
func mask(email: String) -> String? {
let components = email.components(separatedBy: "@")
guard components.count == 2 else { return nil }
let username = components[0]
guard !username.isEmpty else { return nil }
let maskedUsername: String
if username.count <= 3 {
maskedUsername = "(username[username.startIndex])(String(repeating: "*", count: 7))"
} else if username.count <= 8 {
maskedUsername = "(username.prefix(3))(String(repeating: "*", count: 5))"
} else {
maskedUsername = "(username.prefix(3))(String(repeating: "*", count: username.count - 3))"
}
return "(maskedUsername)@(components[1])"
}