Rumah >pembangunan bahagian belakang >Golang >Gunakan ungkapan biasa dalam golang untuk mengesahkan sama ada input ialah alamat IPv4 atau IPv6

Gunakan ungkapan biasa dalam golang untuk mengesahkan sama ada input ialah alamat IPv4 atau IPv6

WBOY
WBOYasal
2023-06-24 13:34:401957semak imbas

Dalam beberapa tahun kebelakangan ini, dengan populariti Internet dan pengembangan senario aplikasi, semakin ramai pembangun telah mula menggunakan bahasa GO untuk pembangunan program. Dalam bahasa GO, adalah keperluan yang sangat biasa untuk menggunakan ungkapan biasa untuk mengesahkan sama ada input itu sah. Antaranya, mengesahkan sama ada input adalah alamat IPv4 atau IPv6 adalah salah satu keperluan biasa. Artikel ini akan memperkenalkan cara menggunakan ungkapan biasa dalam bahasa GO untuk mengesahkan sama ada input ialah alamat IPv4 atau IPv6.

Alamat IPv4, juga dikenali sebagai alamat Internet Protocol versi 4, ialah nombor perduaan 32-bit, biasanya diwakili sebagai empat nombor perpuluhan, setiap nombor dipisahkan dengan "." Sebagai contoh, 192.168.0.1 ialah alamat IPv4 yang sah.

Alamat IPv6, juga dikenali sebagai alamat Internet Protocol versi 6, ialah nombor perduaan 128-bit, biasanya diwakili sebagai kumpulan lapan nombor perenambelasan, setiap kumpulan dipisahkan dengan ":". Contohnya, 2001:0db8:85a3:0000:0000:8a2e:0370:7334 ialah alamat IPv6 yang sah.

Di bawah, kami akan memperkenalkan cara menggunakan ungkapan biasa untuk mengesahkan alamat IPv4 dan IPv6 masing-masing.

Sahkan alamat IPv4

Dalam bahasa GO, anda boleh menggunakan ungkapan biasa untuk mengesahkan sama ada alamat IPv4 itu sah. Ungkapan biasa alamat IPv4 adalah seperti berikut:

^((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]?)$

Antaranya, kurungan segi empat sama menunjukkan item pilihan, tanda soal menunjukkan bahawa bilangan kejadian item pilihan ialah 0 atau 1, dan kurungan menunjukkan segmen alamat lengkap. Ungkapan biasa sepadan dengan setiap segmen alamat satu demi satu dari kiri ke kanan, dan setiap segmen alamat terdiri daripada nombor antara 0 dan 255. Apabila semua segmen alamat berjaya dipadankan, keseluruhan ungkapan biasa dianggap sebagai padanan yang berjaya, jika tidak, ia dianggap sebagai kegagalan padanan.

Seterusnya, kami menggunakan kod sampel untuk menunjukkan cara menggunakan ungkapan biasa untuk mengesahkan kesahihan alamat 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)
}

Hasil keluaran:

IPv4 address 1 is valid: true
IPv4 address 2 is valid: true
IPv4 address 3 is valid: false

Seperti yang anda boleh lihat daripada hasil output, alamat IPv4 1 dan alamat IPv4 2 adalah kedua-dua alamat IPv4 yang sah, manakala alamat IPv4 3 bukanlah alamat IPv4 yang sah.

Sahkan Alamat IPv6

Ungkapan biasa untuk mengesahkan alamat IPv6 adalah lebih rumit sedikit daripada mengesahkan alamat IPv4. Ungkapan biasa alamat IPv6 adalah seperti berikut:

^(([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]))$

Juga sepadan dengan setiap segmen alamat satu demi satu dari kiri ke kanan, tetapi format alamat IPv6 jauh lebih kompleks daripada alamat IPv4. Alamat IPv6 yang sah boleh terdiri daripada salah satu bentuk berikut:

  • Lapan nombor perenambelasan daripada 0 hingga ffff, dipisahkan dengan ":" antara setiap dua nombor
  • Lapan nombor perenambelasan daripada 0 hingga ffff Nombor perenambelasan ffff, dipisahkan dengan ":" antara setiap dua nombor, tetapi nombor terakhir boleh ditinggalkan
  • Satu atau lebih nombor perenambelasan daripada 0 hingga ffff, antara setiap dua nombor Gunakan ":" untuk memisahkan, dan "::" boleh digunakan untuk mewakili singkatan. Singkatan ini hanya boleh muncul sekali dan tidak boleh muncul dalam perenggan pertama atau terakhir
  • Alamat IPv6 khas.

Seterusnya, kami juga menggunakan kod sampel untuk menunjukkan cara menggunakan ungkapan biasa untuk mengesahkan kesahihan alamat 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)
}

Hasil keluaran:

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

Seperti yang anda boleh lihat daripada hasil output, alamat IPv6 1 hingga alamat IPv6 8 adalah semua alamat IPv6 yang sah.

Ringkasan

Menggunakan ungkapan biasa dalam bahasa GO untuk mengesahkan kesahihan alamat IPv4 atau IPv6 boleh dicapai melalui ungkapan biasa. Kami telah memperkenalkan kaedah pengesahan dua alamat di atas, dan kami berharap ia akan membantu perkembangan anda. Apabila menghadapi masalah yang sama, anda boleh merujuk kepada contoh kod dan ungkapan biasa dalam artikel ini untuk melaksanakan pengesahan dengan cepat.

Atas ialah kandungan terperinci Gunakan ungkapan biasa dalam golang untuk mengesahkan sama ada input ialah alamat IPv4 atau IPv6. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn