【问题标题】:Extracting Email Domain in MyPlayground在 MyPlayground 中提取电子邮件域
【发布时间】:2016-03-21 01:17:20
【问题描述】:

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

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

我是编码新手,所以如果这很容易实现,我希望不要侮辱你的智慧。

干杯

【问题讨论】:

  • 兄弟你有什么问题?
  • 您好抱歉不清楚。无论用户是否使用 jsmith@mail.havard.edu、jsmith@student.havard.edu 或 jsmith@havard.edu 等电子邮件注册,我都希望创建一个字符串 = '@domain.edu'

标签: xcode swift email dns extract


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    2020 年最新版本,Swift 5.2,XCode 11.4.1

    适用于所有输入的代码

    let example = "email_id@gmail.com"
    let components = example.components(separatedBy: "@")
    if components.count > 1 {
        let domain = components[1]
        // domain has value gmail.com
    }
    

    【讨论】:

      【解决方案3】:

      我假设您实际上想要 & 符号之后的所有内容。如果是这种情况,那么此代码将起作用。

      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
      

      【讨论】:

      • 谢谢伙计!正是我想要的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-26
      • 2020-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多