Skip to content

Instantly share code, notes, and snippets.

@torburg
Created February 25, 2021 20:14
Show Gist options
  • Save torburg/e8eada56cae69e6289842d29652ce736 to your computer and use it in GitHub Desktop.
Save torburg/e8eada56cae69e6289842d29652ce736 to your computer and use it in GitHub Desktop.
private func formatIP(with text: String) -> String {
let divider = "."
var ipBlocks = text.components(separatedBy: divider)
let lastBlock = ipBlocks.popLast() ?? ""
guard let number = Int(lastBlock), number > 0 else {
if let lastSymbol = text.last,
String(lastSymbol) == divider,
let lastIpBlock = ipBlocks.last,
!lastIpBlock.isEmpty {
return ipBlocks.joined(separator: divider) + (ipBlocks.count <= 3 ? divider : "")
}
return String(text.dropLast())
}
var addingBlock = ""
if lastBlock.count < 3 {
if number > 25 {
addingBlock = lastBlock + (ipBlocks.count < 3 ? divider : "")
} else {
addingBlock = lastBlock
}
} else {
if number <= 255 {
addingBlock = lastBlock + (ipBlocks.count < 3 ? divider : "")
} else {
let additionalSize = lastBlock.count > 3 ? 3 : 2
addingBlock = "\(lastBlock.prefix(additionalSize))"
if ipBlocks.count < 3 {
let addedDigit = lastBlock.suffix( lastBlock.count - additionalSize )
addingBlock += "\(divider)\(addedDigit)"
}
}
}
return ipBlocks.joined(separator: divider)
.appending(ipBlocks.count != 0 ? divider : "")
.appending(addingBlock)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment