Что RegEx будет соответствовать всем петлевым адресам?
У меня есть приложение, которое должно предупреждать пользователя при использовании localhost
, 127.0.0.1
, ::1
или любого обратного адреса (целевой хост используется для подключения базы данных к базе данных, не обязательно внутри среды приложения), Это осложняется тем, что такие адреса, как следующие...
-
127.1
-
127.0.01
-
127.0000.0000.1
-
127.0.0.254
-
127.63.31.15
-
127.255.255.254
-
0::1
-
0000::0001
-
0000:0:0000::01
-
0000:0000:0000:0000:0000:0000:0000:0001
... правильно проанализирует код потребления и решит loopback.
Что такое регулярное выражение, которое будет соответствовать любой перестановке адресов циклы IPv4 и IPv6?
Ответы
Ответ 1
Спустя короткое время, играя в RegexBuddy (который является поистине великолепным инструментом для тестовой конструкции RegEx), я придумал следующее:
^localhost$|^127(?:\.[0-9]+){0,2}\.[0-9]+$|^(?:0*\:)*?:?0*1$
Этот матч RegEx
Строка "localhost"
Эти перестановки адреса обратной связи IPv4
-
127.0.0.1
-
127.0.0.001
-
127.0.00.1
-
127.00.0.1
-
127.000.000.001
-
127.0000.0000.1
-
127.0.01
-
127.1
-
127.001
-
127.0.0.254
-
127.63.31.15
-
127.255.255.254
Эти перестановки адреса обратной связи IPv6
-
0:0:0:0:0:0:0:1
-
0000:0000:0000:0000:0000:0000:0000:0001
-
::1
-
0::1
-
0:0:0::1
-
0000::0001
-
0000:0:0000::0001
-
0000:0:0000::1
-
0::0:1
Этот RegEx не соответствует
Действительное имя сервера
-
servername
-
subdomain.domain.tld
Эти действительные адреса IPv4
Эти действительные адреса IPv6
-
0001::1
-
dead:beef::1
-
::dead:beef:1
Ответ 2
Если вам не нужно доказывать, действительно ли адрес, то это должно работать:
/^(127\.[\d.]+|[0:]+1|localhost)$/i
Ответ 3
Я создал это регулярное выражение для захвата различных перестановок адресов loopback IPv6:
(0 {0,4}: {1,2}) {1,7} ({0} 0,3 1)
я тестировал его по следующим адресам:
- 0: 0: 0: 0: 0: 0: 0: 1
- 0000: 0000: 0000: 0000: 0000: 0000: 0000: 0001
- :: 1
- 0 :: 1
- 0: 0: 0 :: 1
- 0: 0: 0000 :: 1
- 0000: 0: 00 :: 0001
- 0000 :: 0001
- 0000: 0: 0000 :: 0001
- 0000: 0: 0000 :: 1
- 0 :: 0: 1
и он захватил их всех.
вы можете протестировать его на http://regexr.com/3bqpm