RegEx将匹配所有环回地址?

Tul*_*x86 12 regex localhost loopback

我有必须在使用时的警告用户的应用程序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

...将通过消费代码正确解析,并将解析为环回.

什么是正则表达式,它将匹配IPv4和IPv6环回地址的任何排列?

Tul*_*x86 21

经过一段时间摆弄RegexBuddy(这是一个真正伟大的测试驱动的RegEx构建工具),我想出了这个:

^localhost$|^127(?:\.[0-9]+){0,2}\.[0-9]+$|^(?:0*\:)*?:?0*1$
Run Code Online (Sandbox Code Playgroud)

此RegEx匹配

字符串"localhost"

  • localhost
  • 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地址

  • 192.168.0.1
  • 10.1.1.123

这些有效的IPv6地址

  • 0001::1
  • dead:beef::1
  • ::dead:beef:1