我可以使用什么正则表达式来匹配以点十进制表示法表示的任何有效IP地址?
答案 0 :(得分:15)
if($ip=~/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/ &&(($1<=255 && $2<=255 && $3<=255 &&$4<=255 )))
{
print "valid\n";
}
else
{
print "Invalid\n";
}
答案 1 :(得分:14)
CPAN是您的朋友:Regex::Common或Net::IP::Match::Regexp。
答案 2 :(得分:5)
我喜欢这个......就像Steve Hajducko一样,但是使用引用的reg ex rooooock!
my $ip = '120.140.255.254'; # for example
my $ipno = qr/
2(?:5[0-5] | [0-4]\d)
|
1\d\d
|
[1-9]?\d
/x;
if ( $ip =~ /^($ipno\.){3}$ipno$/ ){
print "IP OK\n";
};
我去英国剑桥的Arm接受采访。他们让我在董事会上写了一篇,然后我写了一些蹩脚的......然后......沉溺于我的不良尝试,着手制作一个更好的。失败的驱使?或者也许只是真的被它烦恼了。我仍然得到了这份工作:)
答案 3 :(得分:2)
答案 4 :(得分:2)
如果你可以留下一个perl模块 - 那就去做吧。
怎么样:
if( $ip=~ m/^(\d\d?\d?)\.(\d\d?\d?)\.(\d\d?\d?)\.(\d\d?\d?)/ &&
( $1 <= 255 && $2 <= 255 && $3 <= 255 && $4 <= 255 )
) {
print "valid IP.";
}
答案 5 :(得分:1)
对于A.B.C.D(十进制)格式的IPv4,作为单行:
(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])
如果该行的地址后面没有任何内容,则可以签约:
(?:(?:[01]?\d?\d?|2[0-4]\d|25[0-5])(?:\.|$)){4}
玩得开心。
答案 6 :(得分:0)
(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])
实际上匹配一些无效的IP地址,例如:
192.168.00.001
稍微更精确的解决方案是:
(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)$
答案 7 :(得分:0)
使用端口号
进行IPv4 ip验证if ( $ip =~ /(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})(:(\d{1,5}))?/ )
{
if( $1 > 255 || $2 > 255 || $3 > 255 || $4 > 255)
{
print "invalid ip\n";
return ;
}
if( ( defined $6) && ( $6 > 65536 ))
{
print "invalid port\n";
return ;
}
print "valid ip \n";
}
else
{
print "invalid ip\n";
return ;
}
答案 8 :(得分:0)
$ip='123.0.0.1';
if($ip=~/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/ &&((($1<=255 && $1 > 0) && $2<=255 && $3<=255 &&$4<=255 )))
{
print "valid\n";
}
else
{
print "Invalid\n";
}
块引用
在这种情况下,我们验证0.0.0.0将不会考虑有效的IP。并支持所有重映射的IP高达1.0.0.0到255.255.255.255`enter code here
块引用
答案 9 :(得分:-2)
我不确定为什么我不会在任何地方看到这个,它简短,简洁,真棒。
([0-9]{1,3}\.){3}[0-9]{1,3}