正規表示式驗證合法的IP位址

2021-09-08 13:47:24 字數 1963 閱讀 9618

ipv4位址

最初設計網際網路絡時,為了便於定址和層次化構造網路,每個ip位址包括兩個標識碼(id),即網路id和主機id。同乙個物理網路上的所有主機都使用同乙個網路id,網路上的乙個主機(包括網路上的工作站,伺服器和路由器等)有乙個主機id與其對應。internet委員會定義了5種ip位址型別以適應不同容量的網路,即a類~e類。

類別ip位址範圍

最大網路數

最大主機數

私有ip位址範圍

a0.0.0.0~127.255.255.255

126(2^7 - 2)(a類位址的字首為"0",網路id標識碼的位數為8位,網路號不能全為0且127.0.0.0網路保留用於迴路測試,所以最大網路數為2^7-2)

16777214(2^24 - 2 )

10.0.0.0~10.255.255.255

b128.0.0.0~191.255.255.255

16384(2^14) (b類位址的字首為"10",網路id標識碼的位數為16位,因此最大網路數為(2^14))

65534(2^16 - 2)

172.16.0.0~172.31.255.255

c192.0.0.0~223.255.255.255

2097152(2^21)(c類位址的字首為"110",網路id標誌碼的位數為24位,因此最大網路數為(2^21))

254(2^8 - 2)

192.168.0.0~192.168.255.255

d224.0.0.0~239.255.255.255

d類位址的字首為"1110"

e240.0.0.0~255.255.255.255

e類位址的字首為"1111"

ipv4位址由4組數字組成,每組數字之間以.分隔,每組數字的取值範圍是0~255.

ipv4必須滿足以下四條規則:

任何乙個1位或者兩位數字,即0~99;

任何乙個以1開頭的3位數字,即100~199;

任何乙個以2開頭,第二位數字在0~4之間的數字即200~249;

任何乙個以25開頭,第三位數字在0~5之間的三位數字,即250~255;

首先滿足第一條規則的正則是:

((\d)
滿足第二條規則的正則是:

(1\d)
滿足第三條規則的正則是:

(2[0-4]\d)
滿足第四條規則的正則是:

(25[0-5])
將其組合起來就能得到乙個能匹配0~255的正規表示式了:

((\d)|(1\d)|(2[0-4]\d)|(25[0-5]))
(((\d)|(1\d)|(2[0-4]\d)|(25[0-5]))\.)((\d)|(1\d)|(2[0-4]\d)|(25[0-5]))
使用邊界匹配,不然256.1.1.1也會匹配成功,會匹配成56.1.1.1,那麼最終正確的匹配ipv4的正規表示式為:

(?=(\b|\d))(((\d)|(1\d)|(2[0-4]\d)|(25[0-5]))\.)((\d)|(1\d)|(2[0-4]\d)|(25[0-5]))(?=(\b|\d))
ipv6位址

ipv6的128位位址通常寫成8組,每4組為4個十六進製制數。比如:ad80:0000:0000:0000:abaa:0000:00c2:0002 是乙個合法的ipv6位址。這個位址比較長,看起來不方便也不易於書寫。零壓縮法可以用來縮減其長度。如果幾個連續段位的值都是0,那麼這些0就可以簡單的一::來表示,上述位址就可以寫成ad80::abaa:0000:00c2:0002.這裡需要注意的是只能簡化連續的段位的0,其前後的0都要保留,比如ad80的最後的這個0,不能被簡化。當然也可以在abaa後面使用::,這樣的話前面的12個0就不能壓縮了。這個限制的目的是為了能準確的還原被壓縮的0,不然就無法確定每個::代表多少個0.

支援ipv6基本格式的正規表示式:

^([\\da-fa-f]:)([\\da-fa-f])$

正規表示式驗證合法的IP位址

ipv4位址 最初設計網際網路絡時,為了便於定址和層次化構造網路,每個ip位址包括兩個標識碼 id 即網路id和主機id。同乙個物理網路上的所有主機都使用同乙個網路id,網路上的乙個主機 包括網路上的工作站,伺服器和路由器等 有乙個主機id與其對應。internet委員會定義了5種ip位址型別以適應...

正規表示式驗證Ip位址

ipv4的ip位址都是 1 255 0 255 0 255 0 255 的格式 下面給出相對應的正規表示式 1 d 2 0 4 d 25 0 5 1 9 d 1 9 1 d 2 0 4 d 25 0 5 1 9 d d 1 d 2 0 4 d 25 0 5 1 9 d d 1 d 2 0 4 d 2...

Shell正規表示式驗證IP位址

本機多個ip 複製 如下 ifconfig awk inet awk f 首先,先用這個來著 複製 如下 checkipaddress 0 9 0 9 0 9 dev null if 1 then return 1 else a cut d.f1 tmp tmpserverip b cut d.f2...