Как проверить, является ли его mac-адрес в kotlin

#kotlin

#kotlin

Вопрос:

Я пытаюсь проверить, является ли результат mac-адресом в kotlin.

Как правильно использовать регулярное выражение в if-else?

 regex="X:X:X:X:X:X"

if $theresult is a mac address then do; 
println"its a mac!"
else 
println "its not a mac"
  

Комментарии:

1. То, что у вас есть, — это MAC-адрес . ‘MAC’ = управление доступом к мультимедиа; ‘Mac’ = Macintosh (компьютер Apple); ‘mac’ = macintosh (дождевик).

2. если да, я съем яблоко.

Ответ №1:

Решение с использованием регулярных выражений:

 val macRegex = Regex("([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}")
fun isMac(str: String) = str.matches(macRegex)

fun main() {
    val testCases = listOf(
        "12:34:56:78:90:ab", // true
        "24:1D:57:84:04:35", // true
        "7B:2A:89:CF:9A:F3", // true
        "12:34:56:78:90:AB", // true
        "12:34:56:78:90:fg", // false
        "12:34:56:78:90", // false
        "1234567890ab" // false
    )
    testCases.forEach {
        if (isMac(it)) {
            println("$it - is a mac!")
        } else {
            println("$it - is not a mac")
        }
    }
}
  

Комментарии:

1. Спасибо за ответ. Это очень просто, но результат не является строкой, поэтому мне нужно преобразовать его в строку «if (isMac(it.toString()))», и теперь это работает. Есть ли какой-либо другой способ прямого использования результата?

2. Регулярные выражения работают только со строками. Каков тип объекта, представляющего MAC-адрес в вашем случае?

3. Я не знаю тип, потому что я использую плагин. Если регулярное выражение работает только со строками, я все равно должен конвертировать. Спасибо за информацию.

Ответ №2:

Вы можете разделить двоеточия и проверить, имеет ли он правильное количество частей, затем убедитесь, что каждая часть состоит из 2 символов действительного шестнадцатеричного числа:

 fun isLowerHex(chr: Char): Boolean =
    chr >= '0' amp;amp; chr <= '9' ||
    chr >= 'a' amp;amp; chr <= 'f'

fun isMac(str: String): Boolean {
    val lowerStr = str.toLowerCase()
    val parts = lowerStr.split(":")
    return parts.size == 6 amp;amp; parts.all { it.length == 2 amp;amp; it.all(::isLowerHex) }
}

fun main() {
    val testCases = listOf(
        "12:34:56:78:90:ab", // true
        "24:1D:57:84:04:35", // true
        "7B:2A:89:CF:9A:F3", // true
        "12:34:56:78:90:AB", // true
        "12:34:56:78:90:fg", // false
        "12:34:56:78:90", // false
        "1234567890ab" // false
    );
    testCases.forEach {
        println("$it ${isMac(it)}")
    }
}
  

Комментарии:

1. Спасибо за ответ, но я новичок в kotlin, и я пытаюсь узнать, как я могу использовать регулярное выражение в if-else. Мне понравился ваш подход, но если мне нужно что-то другое, то этот подход не подходит для новичка.