日期:2014-05-18  浏览次数:20792 次

求正规则表达式!
要求验证IP地址和网站的是否合法!

IP4 IP6
IP 可以有端口也可以没有

------解决方案--------------------
事实上,IP地址本身就是32bit或者128bit的数字(或者4、16字节数据),它有很多表现形式。
比如:

1249724265 这是一个合法的IP么?没错,不信你贴入IE地址栏。
------解决方案--------------------
你需要定义什么叫合法。

但是定义的过程本身就是回答你问题的答案。
------解决方案--------------------
^\d{1,3}(\.\d{1,3}){3}$
------解决方案--------------------
^\d{1,3}(\.\d{1,3}){3}(:\d+)?$
------解决方案--------------------
\d+.\d+.\d+.\d+(:\d+){0,1}
------解决方案--------------------
探讨
\d+.\d+.\d+.\d+(:\d+){0,1}

------解决方案--------------------
当然了,这还是不够的。
ip只能在0~255中取值,于是可以写成
([3-9]\d?|[01]\d{0,2}|2\d?|2[0-4]\d|25[0-5])\.)...

这个够了么?没完,你还得区分主机地址、网络地址、保留地址。

显然 0.0.0.0 依然是不合法的。

这个行了么?

不行。

有些ip还没有被分配出来……这个正则就无能为力了。。。


所以这个问题有没有解,取决于你对“合法”两个字的理解。

也许你根本没想过正则表达式不是求来的,而是根据需要自己去写的。写的过程就是定义你的需求的过程。所以你可能看着网上同一个问题有各种正则表达式,当然有些是等价的,比如
\d+.\d+.\d+.\d+和(\d+.){3}\d+
但是更多的,是写正则表达式的人对规则的理解不同。