16

我有一个应用程序,它必须在使用localhost127.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 环回地址的任何排列的正则表达式?

4

3 回答 3

32

RegexBuddy(这是一个真正出色的测试驱动的 RegEx 构建工具)中摆弄了一小段时间之后,我想出了这个:

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

此 RegEx 匹配

字符串“本地主机”

  • 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

此正则表达式不匹配

有效的服务器名称

  • servername
  • subdomain.domain.tld

这些有效的 IPv4 地址

  • 192.168.0.1
  • 10.1.1.123

这些有效的 IPv6 地址

  • 0001::1
  • dead:beef::1
  • ::dead:beef:1
于 2011-12-08T05:00:37.990 回答
4

如果您不关心证明地址是否有效,那么这应该有效:

/^(127\.[\d.]+|[0:]+1|localhost)$/i
于 2011-12-08T05:05:38.030 回答
1

我创建了这个正则表达式来捕获 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上对其进行测试

于 2015-09-19T16:52:35.013 回答