近年、インターネットの普及と応用シナリオの拡大に伴い、プログラム開発に GO 言語を使用する開発者が増えています。 GO 言語では、正規表現を使用して入力が正当かどうかを確認することが非常に一般的な要件です。その中で、入力が IPv4 アドレスであるか IPv6 アドレスであるかを確認することは、共通の要件の 1 つです。この記事では、GO 言語で正規表現を使用して、入力が IPv4 アドレスであるか IPv6 アドレスであるかを確認する方法を紹介します。
IPv4 アドレス (インターネット プロトコル バージョン 4 アドレスとも呼ばれる) は 32 ビットの 2 進数で、通常は各数値が「.」で区切られた 4 つの 10 進数で表されます。たとえば、192.168.0.1 は有効な IPv4 アドレスです。
IPv6 アドレス (インターネット プロトコル バージョン 6 アドレスとも呼ばれる) は 128 ビットの 2 進数で、通常は 8 つの 16 進数のグループとして表され、各グループの間には「:」が含まれます。たとえば、2001:0db8:85a3:0000:0000:8a2e:0370:7334 は有効な IPv6 アドレスです。
以下では、正規表現を使用して IPv4 アドレスと IPv6 アドレスをそれぞれ検証する方法を紹介します。
IPv4 アドレスの確認
GO 言語では、正規表現を使用して IPv4 アドレスが正当かどうかを確認できます。 IPv4 アドレスの正規表現は次のとおりです。
^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$
このうち、角括弧はオプション項目を示し、疑問符はオプション項目の出現回数が 0 または 1 であることを示し、括弧は完全なアドレスセグメントを示します。 。正規表現は各アドレス セグメントを左から右に 1 つずつ照合し、各アドレス セグメントは 0 ~ 255 の数値で構成されます。すべてのアドレス セグメントが正常に一致すると、正規表現全体が一致したとみなされ、それ以外の場合は一致が失敗したとみなされます。
次に、サンプル コードを使用して、正規表現を使用して IPv4 アドレスの正当性を検証する方法を示します。
package main import ( "fmt" "regexp" ) func main() { ipv4Regex := `^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$` ipv4Address1 := "192.0.2.1" ipv4Address2 := "255.255.255.255" ipv4Address3 := "256.0.0.1" match1, _ := regexp.MatchString(ipv4Regex, ipv4Address1) match2, _ := regexp.MatchString(ipv4Regex, ipv4Address2) match3, _ := regexp.MatchString(ipv4Regex, ipv4Address3) fmt.Println("IPv4 address 1 is valid: ", match1) fmt.Println("IPv4 address 2 is valid: ", match2) fmt.Println("IPv4 address 3 is valid: ", match3) }
出力結果:
IPv4 address 1 is valid: true IPv4 address 2 is valid: true IPv4 address 3 is valid: false
出力結果からわかるように、IPv4 アドレス 1 と IPv4 アドレス 2 は両方とも正当な IPv4 アドレスですが、IPv4 アドレス 3 は正当な IPv4 アドレスではありません。
IPv6 アドレスの検証
IPv4 アドレスの検証と比較して、IPv6 アドレスを検証するための正規表現は少し複雑です。 IPv6 アドレスの正規表現は次のとおりです。
^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:([0-9a-fA-F]{1,4}|:)|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$
も各アドレス セグメントを左から右に 1 つずつ照合しますが、IPv6 アドレスの形式は IPv4 アドレスよりもはるかに複雑です。有効な IPv6 アドレスは、次のいずれかの形式で構成できます。
次に、サンプル コードを使用して、正規表現を使用して IPv6 アドレスの正当性を検証する方法も示します。
package main import ( "fmt" "regexp" ) func main() { ipv6Regex := `^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:([0-9a-fA-F]{1,4}|:)|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$` ipv6Address1 := "2001:0db8:85a3:0000:0000:8a2e:0370:7334" ipv6Address2 := "2001:db8::1" ipv6Address3 := "2001:db8:::1" ipv6Address4 := "ff02::2" ipv6Address5 := "fe80::1%eth0" ipv6Address6 := "fe80::1234:5678:9abc:def0%3" ipv6Address7 := "::ffff:192.0.2.128" ipv6Address8 := "0:0:0:0:0:0:0:1" match1, _ := regexp.MatchString(ipv6Regex, ipv6Address1) match2, _ := regexp.MatchString(ipv6Regex, ipv6Address2) match3, _ := regexp.MatchString(ipv6Regex, ipv6Address3) match4, _ := regexp.MatchString(ipv6Regex, ipv6Address4) match5, _ := regexp.MatchString(ipv6Regex, ipv6Address5) match6, _ := regexp.MatchString(ipv6Regex, ipv6Address6) match7, _ := regexp.MatchString(ipv6Regex, ipv6Address7) match8, _ := regexp.MatchString(ipv6Regex, ipv6Address8) fmt.Println("IPv6 address 1 is valid: ", match1) fmt.Println("IPv6 address 2 is valid: ", match2) fmt.Println("IPv6 address 3 is valid: ", match3) fmt.Println("IPv6 address 4 is valid: ", match4) fmt.Println("IPv6 address 5 is valid: ", match5) fmt.Println("IPv6 address 6 is valid: ", match6) fmt.Println("IPv6 address 7 is valid: ", match7) fmt.Println("IPv6 address 8 is valid: ", match8) }
出力結果:
IPv6 address 1 is valid: true IPv6 address 2 is valid: true IPv6 address 3 is valid: false IPv6 address 4 is valid: true IPv6 address 5 is valid: true IPv6 address 6 is valid: true IPv6 address 7 is valid: true IPv6 address 8 is valid: true
出力結果からわかるように、IPv6アドレス1からIPv6アドレス8までは、すべて正当なIPv6アドレスです。
概要
GO 言語で正規表現を使用して、IPv4 または IPv6 アドレスの正当性を検証することは、正規表現によって実現できます。上記2つのアドレスの検証方法を紹介しましたので、開発のお役に立てれば幸いです。同様の問題が発生した場合は、この記事のコード例と正規表現を参照して、検証を迅速に実装できます。
以上がgolang で正規表現を使用して、入力が IPv4 アドレスであるか IPv6 アドレスであるかを確認するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。