【问题标题】:Check range of IP address using javascript reqular expression only仅使用 javascript 正则表达式检查 IP 地址范围
【发布时间】:2013-01-08 08:29:22
【问题描述】:

我想在正则表达式中检查 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;
}

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

【问题讨论】:

  • 是的,它可以用正则表达式完成 - 但你为什么要这样做?
  • 是的,你可以,但它离漂亮远。
  • 我知道,但我必须检查 url 是否包含 ip 192.168.0.137/sss

标签: javascript regex ip


【解决方案1】:

最直接的方法是查看不同的案例:

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?

【讨论】:

  • 后者允许00,看来你需要[1-9]\d?|1\d\d
  • 谢谢,它正在工作,但第一个或第二个在数字之前都不接受零,例如 055 试试 pagecolumn.com/tool/regtest.htm
  • @Sally 我不知道你尝试了什么,但它在那个网站上工作得很好。你知道 Bergi 和我的 RegEx 都只匹配一个数字吗?
【解决方案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,旧版浏览器可能需要 shim)

【讨论】:

  • 不应该是\{1,3} 是\d{1,3}?
  • 我尝试了你的两个正则表达式,它只接受像 23.23.23.23 这样的两位数,而像 255 这样的任何三位数字都无法匹配,试一试! pagecolumn.com/tool/regtest.htm
【解决方案3】:

可能会晚,但有人可以尝试:

有效 IP 地址示例

115.42.150.37
192.168.0.1
110.234.52.124

无效 IP 地址示例

    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]

用于验证 IP 地址的 JavaScript 代码

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

【讨论】:

    猜你喜欢
    • 2012-12-23
    • 2011-05-26
    • 2011-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-14
    • 1970-01-01
    • 2016-02-07
    相关资源
    最近更新 更多