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;
}

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

4

3 回答 3

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?
于 2013-01-24T14:43:00.700 回答
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]/

我想你会承认 usingparseInt更具可读性,更不容易出错并且更易于维护。

它甚至可以更短:

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

(使用 ES5every方法,对于旧版浏览器可能需要 shim)

于 2013-01-24T14:42:02.883 回答
0

可能会迟到,但有人可以尝试:

有效 IP 地址示例

115.42.150.37
192.168.0.1
110.234.52.124

Example of INVALID IP address

    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 code to validate an IP address

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)  
}  
于 2014-12-12T00:33:32.793 回答