这是我创建的一种算法,用于从电子邮件地址解析域和扩展名。我使用了最常见的域后缀的硬编码列表来帮助确保我不会只返回电子邮件的后缀部分,如果它有 2 部分域后缀,例如“co.uk”或“ca.gov”。
您只需要为您的用例在结果域中添加“@”。
class func parseDomain(fromEmail email: String) -> String? {
let suffixList = ["com", "edu", "gov", "int", "mil", "net", "org", "xyz", "biz", "info", "ai", "io", "co", "ly", "eu", "cn", "ru", "nl", "de", "uk"]
guard let emailDomains = email.components(separatedBy: "@").last else {
return nil
}
let domainParts = emailDomains.components(separatedBy: ".")
guard domainParts.count >= 2 else {
return nil
}
var domain = domainParts[domainParts.count - 2] + "." + domainParts[domainParts.count - 1]
let secondLastComponent = domainParts[domainParts.count - 2]
if suffixList.contains(secondLastComponent) && domainParts.count >= 3 {
// we want to avoid returning things like co.uk, or com.au,
// so if the 2nd last component is a common suffix, return the last 3 parts instead.
domain = domainParts[domainParts.count - 3] + "." + domainParts[domainParts.count - 2] + "." + domainParts[domainParts.count - 1]
}
return domain
}