IPv4 地址
由十进制数和点来表示,每个地址包含4个十进制数,其范围为 0 - 255, 用 (".")
分割
不会以 0 开头
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| func isValidIPv4(_ ip: String) -> Bool {
let parts = ip.components(separatedBy: ".") if parts.count != 4 { return false } for value in parts { if value.first == "0", value.count > 1 { return false } let intValue = Int(value) ?? -1 guard 0...255 ~= intValue else { return false } }
return true }
|
IPv6 地址
由 8 组 16 进制的数字来表示,每组表示 16 比特。用 (":")
分割
可以加入一些以 0 开头的数字,字母可以使用大写,也可以是小写
不能因为某个组的值为 0,而使用一个空的组,以至于出现 (::)
的情况
多余的 0 是不被允许的
2001:0db8:85a3:0000:0000:8a2e:0370:7334
2001:db8:85a3:0:0:8A2E:0370:7334
2001:0db8:85a3::8A2E:0370:7334
02001:0db8:85a3:0000:0000:8a2e:0370:7334
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| func isValidIPv6(_ ip: String) -> Bool {
let parts = ip.components(separatedBy: ":")
if parts.count != 8 { return false }
for value in parts {
if value.count > 4 { return false }
let intValue = Int(value, radix: 16) ?? -1
guard 0...0xffff ~= intValue else { return false } } return true }
|