如何验证广播IP地址(从224.0.0.0到239.255.255.255)

时间:2013-04-23 07:47:44

标签: javascript

我想验证广播和多播IP地址。 这是两个ip我正在使用255.255.255.0或229.0.0.20。

['validate-mcast-ip', 'Please enter a valid multicast ip in this field.', function (v) {
  if (v == "") return true;
  if (v == "0.0.0.0") return false;

  ipPattern = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/;
  ipArray = v.split(".");
  isIP = ipPattern.test(v);
  if (isNaN(ipArray[0]) || ipArray[0] < 224 || ipArray[0] > 239) {
    isIP = false;
  }
  for (i = 1; i < ipArray.length; i++) {
    if (isNaN(ipArray[i]) || ipArray[i] > 255) {
      isIP = false;
    }
  }
  return isIP;
}],

我想在输入多播IP和广播IP时发出警报。

2 个答案:

答案 0 :(得分:3)

“{em>简单”正则表达式(例如/^(2(?:2[4-9]|3[0-9]))\.([0-2]?[0-9]?[0-9])\.([0-2]?[0-9]?[0-9])\.([0-2]?[0-9]?[0-9])$/g)应该完全符合您的要求。

function validateMulticastIP(ip) {
    return !!ip.match(/^(2(?:2[4-9]|3[0-9]))\.([0-2]?[0-9]?[0-9])\.([0-2]?[0-9]?[0-9])\.([0-2]?[0-9]?[0-9])$/g);
}
validateMulticastIP('2.3.5.6'); //false
validateMulticastIP('2'); //false
validateMulticastIP('230.3.5.6'); //true
validateMulticastIP('255.255.255.0'); //false
validateMulticastIP('229.0.0.20'); //true

Regex101 Demo

答案 1 :(得分:0)

那么你到底想要做什么呢?你正在检查IP(你已经解析成四个项目的数组)符合你设置的一些限制。假设您希望仅允许 224.0.0.0和239.255.255.255之间的所有IP地址,包括两个地址225.225.225.0和229.0.0.20(就像你一样)最初说)。你是怎么做到的?

首先,检查IP是否介于224.0.0.0和239.255.255.255之间。为此,人们可以很容易地看到只需要检查第一个数字。因此:

if(ipArray[0]<224||ipArray[0]>239)
    return false;

但是等一下:如果IP地址是225.225.225.0或229.0.0.20,我们应该返回false!因此,我们的最后一个代码段变为:

if((ipArray[0]<224||ipArray[0]>239)&&v!="255.255.255.0"&&v!="229.0.0.20")
    return false;

请注意,条件开头的||部分是“括号”(缺少更好的单词)。这是因为如果我们不这样做,Javascript解释器会认为我们的意思是:

if(ipArray[0]<224||(ipArray[0]>239&&v!="255.255.255.0"&&v!="229.0.0.20"))
    return false;

这是因为&&运算符比||运算符具有更高precedence(阅读本文的那一部分!)。

现在,凭借我们新发现的知识,让我们重写原始代码:

function (v) {
    if(v=="") return true;
    if(v=="0.0.0.0") return false;

    if(!v.match(/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/)) return false;
    ipArray = v.split(".");
    //We don't need to check for NAN anymore because it matched your
    //beautiful regex above
    if((ipArray[0]<224||ipArray[0]>239)&&v!="255.255.255.0"&&v!="229.0.0.20")
        return false;
    return true; //if we've reached this point, the IP conforms to the restrictions!
}

你的问题得到了解答吗?如果是这样,请不要忘记帮助Stack Overflow并将此答案标记为已接受(绿色复选标记)!