2010-02-17 3 views
1

Что такое регулярное выражение, которое может найти только маршрутизируемые адреса IPv4? EG, не соответствует 192.0.2.1/24, 127.0.0.1 и т. Д. Google, похоже, обнаруживает, что все слишком распространенное регулярное выражение «является ip-адресом».Regex for IPv4 Только адрес маршрутизации

+1

Это не похоже на очевидный прецедент для регулярного выражения. По какой причине у вас есть *, чтобы сделать это с помощью регулярного выражения? –

+0

Я подумал, что это лучший способ, но из ответа Анона я думаю, что теперь есть лучший способ. – Zombies

ответ

3

Попытка реализовать бизнес-правила в регулярном выражении - плохая идея.

Просто проанализируйте IP-адрес и проверьте, удовлетворяет ли он вашим критериям в коде.

0

Вы не можете делать это в регулярном выражении в любом случае, а не эффективно. Проанализируйте его, затем проверьте специальные адреса (многоадресная рассылка, RFC 1918 и т. Д.).

0

Попробуйте это:

^([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(?<!172\.(16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31))(?<!127)(?<!^10)(?<!^0)\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(?<!192\.168)(?<!172\.(16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31))\.([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])(?<!\.0$)(?<!\.255$)$ 

Это правильно не соответствует это недопустимые IP-адреса:

999.999.999.999. 
108.0.0.01 
0.1.2.3 
00.0000.00.00 
192.168.1.1 
912.456.123.123 
.3.3.3.0 
3.2.2.0 
192.168.0.0 
18.16.0.0 

Это не соответствуют локальных IP-адресов:

172.16.0.9 
172.16.4.1 
172.17.1.1 
127.0.0.2 
10.0.1.5 
10.0.0.1 
10.155.155.155 
10.255.255.254 
172.16.0.4 
172.16.0.1 
172.17.1.1 
172.31.254.254 

Наконец-то это не соответствует широковещательные IP-адреса:

60.123.247.255 
196.168.255.255 
10.255.255.255 
192.168.255.255 

Любой другой IP я опробованных это матч до сих пор, но я не сделал это тщательно, так что могут быть некоторые ошибки.

Смежные вопросы