2013-01-24 84 views
0

我要检查IP地址范围在正则表达式,我用这种方式 ,它的工作如此成功检查范围只

function validate_ip(ip) 
{ 
     // See if x looks like an IP address using our "almost IP regex". 
    var regex = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/; 
    var match = regex.exec(ip); 
    if (!match) return false; 
    // Additional code to check that the octets aren't greater than 255: 
    for (var i = 1; i <= 4; ++i) { 
     if (parseInt(match[i]) > 255) 
      return false; 
    } 
    return true; 
} 

现在我想执行检查范围和在正则表达式中的语法 可以这样做吗?

+3

是的,它可以用正则表达式来完成 - 但为什么你会永远这样做呢? – Bergi

+2

是的,你可以,但它会远离美丽。 – phant0m

+0

我知道,但我必须检查url包含IP http://192.168.0.137/sss – Sally

回答

4

最直接的方法是看不同的情况:

25[0-5]|2[0-4]\d|1?\d\d? 

这将匹配0到255之间的数字,不允许使用前缀零,例如:055.

如果要排除零:

25[0-5]|2[0-4]\d|1\d\d|[1-9]\d? 
+1

后一个将允许'00',似乎你需要'[1-9] \ d?| 1 \ d \ d' – Bergi

+0

@Bergi正确,I忘记删除问号。 – phant0m

+0

谢谢,它的工作,但没有第一个或第二个接受零数字例如0.055 给它一个尝试pagecolumn.com/tool/regtest.htm – Sally

2

从1到255表示数字是这样的数字的正则表达式:

/[1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]/ 
// next try, allowing 0: 
/[1-9]?\d|1\d\d|2[0-4]\d|25[0-5]/ 

我想你会承认使用parseInt是更可读,容易出错少和更好的维护。

它甚至可能更短:

/^\d{1,3}(\.\d{1,3}){3}$/.test(ip) && ip.split(".").every(function(octet) { 
    return parseInt(octet, 10) < 256; 
}); 

(使用ES5 every method,可能需要为旧版浏览器垫片)

+1

不应该'\ {1,3}'是'\ d {1,3}'? – phant0m

+0

@ phant0m:谢谢,修正。 – Bergi

+0

我试过你的两个正则表达式,它只接受像23.23.23.23这样的二位数字,并且任何三位数字如255不能匹配 试一试! http://www.pagecolumn.com/tool/regtest.htm – Sally

0

月下旬,但是,有些人可以尝试:有效的IP地址无效的IP地址的

115.42.150.37 
192.168.0.1 
110.234.52.124 

210.110 – must have 4 octets 
    255 – must have 4 octets 
    y.y.y.y – only digit has allowed 
    255.0.0.y – only digit has allowed 
    666.10.10.20 – digit must between [0-255] 
    4444.11.11.11 – digit must between [0-255] 
    33.3333.33.3 – digit must between [0-255] 

JavaScript代码来验证一个IP地址

function ValidateIPaddress(ipaddress) 
{ 
if (/^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(ipaddress)) 
    { 
    return (true) 
    } 
alert("You have entered an invalid IP address!") 
return (false) 
}