diff options
-rw-r--r-- | src/main/kotlin/IPAddress.kt | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/src/main/kotlin/IPAddress.kt b/src/main/kotlin/IPAddress.kt index 4d3967d..5e3cb0c 100644 --- a/src/main/kotlin/IPAddress.kt +++ b/src/main/kotlin/IPAddress.kt @@ -11,18 +11,26 @@ class IPAddress { constructor(address: String) { val split4 = address.split('.') val split6 = address.split(':') - var bytes: List<Byte> = emptyList() - if (split4.size == 4) { - bytes = split4.map { it.toByte() } + val isV4 = split4.size == 4 && + split4.size == split4.filter { it.matches(Regex("^[0-9]$")) }.size + + val isV6 = split6.size == 16 && + split6.size == split6.filter { it.contains(Regex("^[0-9][a-f]$")) }.size + + if (isV4) { this.is4 = true - } else if (split6.size == 16) { - bytes = split4.map { it.toByte(16) } + } else if (isV6) { this.is4 = false } else { throw NumberFormatException() } + var bytes: List<Byte> = if (this.is4) { + split4.map { it.toByte(10) } + } else { + split6.map { it.toByte(16) } + } this.address = bytes.toTypedArray() } |