Para números de 0 a 255, eu uso este regex:
(([0-9])|([1-9][0-9])|(1([0-9]{2}))|(2[0-4][0-9])|(25[0-5]))
O regex acima corresponderá ao número inteiro de 0 a 255, mas não corresponderá a 256.
Portanto, para IPv4, uso este regex:
^(([0-9])|([1-9][0-9])|(1([0-9]{2}))|(2[0-4][0-9])|(25[0-5]))((\.(([0-9])|([1-9][0-9])|(1([0-9]{2}))|(2[0-4][0-9])|(25[0-5]))){3})$
É nesta estrutura: ^(N)((\.(N)){3})$
onde N é a regex usada para corresponder ao número de 0 a 255.
Esta regex irá corresponder ao IP como abaixo:
0.0.0.0
192.168.1.2
mas não aqueles abaixo:
10.1.0.256
1.2.3.
127.0.1-2.3
Para IPv4 CIDR (roteamento entre domínios sem classes), uso este regex:
^(([0-9])|([1-9][0-9])|(1([0-9]{2}))|(2[0-4][0-9])|(25[0-5]))((\.(([0-9])|([1-9][0-9])|(1([0-9]{2}))|(2[0-4][0-9])|(25[0-5]))){3})\/(([0-9])|([12][0-9])|(3[0-2]))$
É nesta estrutura: ^(N)((\.(N)){3})\/M$
onde N é a regex usada para corresponder ao número de 0 a 255 e M é a regex usada para corresponder ao número de 0 a 32.
Esta regex corresponderá ao CIDR como abaixo:
0.0.0.0/0
192.168.1.2/32
mas não aqueles abaixo:
10.1.0.256/16
1.2.3./24
127.0.0.1/33
E para uma lista de CIDR IPv4 como "10.0.0.0/16", "192.168.1.1/32"
eu uso esta regex:
^("(([0-9])|([1-9][0-9])|(1([0-9]{2}))|(2[0-4][0-9])|(25[0-5]))((\.(([0-9])|([1-9][0-9])|(1([0-9]{2}))|(2[0-4][0-9])|(25[0-5]))){3})\/(([0-9])|([12][0-9])|(3[0-2]))")((,([ ]*)("(([0-9])|([1-9][0-9])|(1([0-9]{2}))|(2[0-4][0-9])|(25[0-5]))((\.(([0-9])|([1-9][0-9])|(1([0-9]{2}))|(2[0-4][0-9])|(25[0-5]))){3})\/(([0-9])|([12][0-9])|(3[0-2]))"))*)$
É nesta estrutura: ^(“C”)((,([ ]*)(“C”))*)$
onde C é a regex usada para corresponder ao CIDR (como 0.0.0.0/0).
Este regex corresponderá à lista de CIDR como abaixo:
“10.0.0.0/16”,”192.168.1.2/32”, “1.2.3.4/32”
mas não aqueles abaixo:
“10.0.0.0/16” 192.168.1.2/32 “1.2.3.4/32”
Talvez fique mais curto, mas para mim é fácil de entender tão bem por mim.
Espero que ajude!
ping 2130706433
eping 127.1
dê uma risadinha.