【问题标题】:Parse a ip in swift快速解析ip
【发布时间】:2017-02-03 06:04:55
【问题描述】:

我正在尝试解析一个以进行验证, 喜欢

var ip = "192.168.1.2"

所以我需要在响应的 api 调用中传递这个 ip,因为我需要传递从 "192.168.1.[1-255]"255,以获得响应。

我的问题是如何实现这一点,需要我用'。'溢出字符串并移动到一个数组中并使用索引搜索 4. 直到 255。

或者有其他方法可以实现吗?

【问题讨论】:

  • 什么意思?您是要验证当前的 ip 还是要生成该范围内的 ip?
  • @MYGz 我需要将 ip (192.168.1.[1-255]) 传递给函数。对于特定的 IP,我会得到回应。
  • 给出了总体思路。我不知道 swift 或者会给你工作代码。

标签: ios arrays regex swift string


【解决方案1】:

//如果你有固定的本地ip比如“192.168.1.x”

for i in 1...255 {
    let ip = "192.168.1.\(i)"
    // Call the API with ip
}

//如果你从其他服务或引用获得本地ip,那么

let ip = "192.168.1.10"
let ipAry = ip.components(separatedBy: ".")
let ipStr = "\(ipAry[0]).\(ipAry[1]).\(ipAry[2])"

for i in 1...255 {
    let newIP = "\(ipStr).\(i)"
    // Call the API with ip
}

【讨论】:

    【解决方案2】:

    总体思路:

    1. 从头到尾提取所有内容'.'
    2. 运行 for 循环并生成 1 到 255 之间的数字。
    3. 将 step2 中生成的数字转换为字符串,并将其附加到 step1 的结果中。
    4. 使用最终字符串点击 api 并检查响应。
    5. 如果您收到响应,则中断循环并在循环外使用响应对象。

    您可以使用字符串方法或正则表达式执行第 1 步。虽然字符串方法会更好,但我会给出正则表达式的例子。

    使用正则表达式的第 1 步:

    ^(.*?\.)\d+$
    

    所需的字符串将被捕获为组 1。

    演示:

    https://regex101.com/r/gQKs0w/1

    【讨论】:

      【解决方案3】:

      无需拆分和迭代

      func isValidIp(ip : String) -> Bool {
          let allowedIpPrefix = "192.168.1."
          if ip.hasPrefix(allowedIpPrefix) {
              let suffix = String(ip.characters.dropFirst(allowedIpPrefix.characters.count))
              if let suffixValue = Int(suffix){
                  //check for "0" prefix because 192.168.1.01 is invalid ip but Int("01") will return valid 1
                  if (1 ... 255).contains(suffixValue) && !suffix.hasPrefix("0") {
                      return true
                  }
              }
          }
      
          return false
      }
      

      【讨论】:

        猜你喜欢
        • 2014-10-14
        • 2018-07-08
        • 2011-10-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多