0
0

Go言語で与えられた入力文字列が有効なMACアドレスの形式を満たしているかどうかを判断するIsMacAddressを作ってみた

Posted at

Go言語で与えられた入力文字列が有効なMACアドレスの形式を満たしているかどうかを判断するIsMacAddressを作ってみた

Happy set

「キェェェェェェアァァァァァァシャァベッタァァァァァァァ!!!」

「マタシャベッタァ!!!!」

「ハッピィィデェェウメツクシィィテェェエ!!!」

「レストインピィィィッッスマデイコウゼ!!」

「イツカミタァァァ??!ジゴクモイイトコロッッオォォゥ!!」

「アイォヲヲヲバラマイテェエィィィイエエ!!!!!」


目次

1. MACアドレスとは

 MACアドレス(Media Access Control Address)とは、ネットワーク内のデバイスを一意に識別するために使用される固有の識別子です。

 MACアドレスは通常、6つの2桁の16進数がコロン(:)で区切られた形式(例: 00:1A:2B:3C:4D:5E)で表されます。

 また、ハードウェア製造時にネットワークインターフェースカード(NIC)に永続的に割り当てられております。

 このアドレスは、物理的なネットワークセグメント内でデバイス間のデータ転送を管理する際に使用され、イーサネットやWi-Fiなどの多くの種類のネットワークで利用されます。

参考
macアドレス Wikipedia

2. コード例と実行例

以下は、与えられた文字列が、MACアドレスかどうかをチェックする関数のコード例です。

コード例

package main

import (
    "regexp"
)

// IsMacAddress は入力された文字列がMACアドレスの形式に一致するかどうかを判断します。
func IsMacAddress(input string) bool {
    // MACアドレスの正規表現パターン
    macAddressPattern := `^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$`
    re := regexp.MustCompile(macAddressPattern)

    return re.MatchString(input)
}

ここで使っているのが正規表現、と呼ばれるものです。

正規表現(Regular Expression)

 正規表現は、文字列の検索、置換、解析などを行うための強力なツールです。

特定のパターンに一致する文字列を記述するための方法です。

 この場合、MACアドレスが特定のフォーマットに従っているかを検証するために使用されています。

今回使われている正規表現パターン

^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$
  • ^ : 文字列の開始を意味します。

  • ([0-9A-Fa-f]{2}[:-]){5} : この部分は、2桁の16進数(0-9A-Fa-fの範囲)がコロン(:)またはハイフン(-)で5回繰り返されることを表します。{2}は2文字の16進数を意味し、{5}はそのパターンが5回繰り返されることを意味します。

  • ([0-9A-Fa-f]{2}) : 文字列の最後にある2桁の16進数を表します。

  • $ : 文字列の終了を意味します。


  • regexp.MustCompile : この関数は、指定された正規表現パターンから、正規表現オブジェクト(re)をコンパイルします。このオブジェクトは、その後の操作で使用されます。MustCompileは、パターンが無効な場合にパニック(実行時エラー)を発生させるため、通常は静的なパターンで使用されます。

  • re.MatchString(input) : これは、コンパイルされた正規表現オブジェクトreを使って、入力された文字列inputが正規表現パターンに一致するかどうかをチェックします。一致する場合はtrueを、そうでない場合はfalseを返します。

 因みにregexpは「Regular Expression(正規表現)」の略です。

参考
正規表現Wikipedia

実行例例

package main

import (
    "fmt"
    "regexp"
)

// IsMacAddress function to check if the input is a valid MAC address
func IsMacAddress(input string) bool {
    macAddressPattern := `^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$`
    re := regexp.MustCompile(macAddressPattern)

    return re.MatchString(input)
}

func main() {
    testAddresses := []string{
        "00:1A:2B:3C:4D:5E", // Valid MAC address
        "00-1A-2B-3C-4D-5E", // Valid MAC address with hyphens
        "00:1A:2B:3C:4D:5G", // Invalid MAC address (contains 'G')
        "001A:2B:3C:4D:5E",  // Invalid MAC address (missing a pair)
        "",                  // Invalid MAC address (empty string)
    }

    for _, address := range testAddresses {
        fmt.Printf("Testing '%s': %t\n", address, IsMacAddress(address))
    }
}
Testing '00:1A:2B:3C:4D:5E': true
Testing '00-1A-2B-3C-4D-5E': true
Testing '00:1A:2B:3C:4D:5G': false
Testing '001A:2B:3C:4D:5E': false
Testing '': false

3. おわりに

 正規表現はまだまだあるらしく、今後も勉強していきたいです。

 macのパソコンを使っているので、MACアドレスには謎の親近があります(関係ない)。

 人間にも、身体のどこかに固有の番号が刻まれているかも。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0