在MyPlayground中提取电子邮件域

时间:2016-03-21 01:17:20

标签: xcode swift email dns extract

我正在开发一个聊天应用程序。用户需要使用大学电子邮件地址注册。

我的应用程序将严重依赖于使用UnivID(大学ID)划分用户,这将是'@'符号以及电子邮件域。例如,如果用户使用以下任一电子邮件地址注册:jsmith@mail.havard.edu, jsmith@havard.edu, or jsmith@student.havard.edu. The UnivID = '@havard.edu'

我对编码很陌生,所以如果这很容易实现,我希望不要侮辱你的情报。

干杯

3 个答案:

答案 0 :(得分:0)

我认为你真的想要在&符之后的一切。如果是这种情况,则此代码将起作用。

let example = "jsmith@student.harvard.edu"
let univId = "@" + example.componentsSeparatedByString("@")[1]
// "@student.harvard.edu"

如果你真的只想要扩展域字符串的最后两部分,那么这将有效。

let example = "jsmith@student.harvard.edu"
let domain  = example.componentsSeparatedByString("@")
let parts   = domain.componentsSeparatedByString(".")
let univId  = "@" + parts[parts.count - 2] + "." + parts[parts.count - 1]
// @harvard.edu

答案 1 :(得分:0)

这是我创建的一种算法,用于从电子邮件地址解析域和扩展名。我使用了最常见的域后缀的硬编码列表,以帮助确保我不会仅返回电子邮件的后缀部分(如果它具有两部分的域后缀),例如“ 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
}

答案 2 :(得分:0)

最新版2020,Swift 5.2,XCode 11.4.1

适用于所有输入的代码

state, fA, fB