首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

求正轨则表达式

2012-07-31 
求正规则表达式!要求验证IP地址和网站的是否合法!IP4 IP6IP 可以有端口也可以没有[解决办法]事实上,IP地址

求正规则表达式!
要求验证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+
但是更多的,是写正则表达式的人对规则的理解不同。

热点排行