如何验证广播 IP 地址?
Posted
技术标签:
【中文标题】如何验证广播 IP 地址?【英文标题】:How to validate broadcast IP addresses? 【发布时间】:2013-04-16 08:08:31 【问题描述】:我想验证广播和多播 IP 地址,即我正在使用的两个 IP 地址:255.255.255.0
或 229.0.0.20
。
我想在输入多播或广播 IP 时发出警报。
以下代码适用于多播地址,但如何验证广播地址?
[
'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 = /^(\d1,3)\.(\d1,3)\.(\d1,3)\.(\d1,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 但我如何验证广播地址 请看这段代码的braod case if(isNaN(ipArray[0]) || ipArray[0] 239) isIP = false; 【参考方案1】:那么你到底想做什么呢?你正在检查 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!所以我们最后的代码 sn-p 变成了:
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(/^(\d1,3)\.(\d1,3)\.(\d1,3)\.(\d1,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 并将此答案标记为已接受(绿色复选标记)!
【讨论】:
是的,我想要什么......让我试试上面的代码,我可以为 ip 225.225.225.0 抛出错误,但不会为 229.0.0.20 抛出错误 if(isNaN(ipArray[0]) || ipArray[0] 239 && v!="225.225.225.0" && v!="229.0.0.20 ") isIP = false;这是我尝试过的,但如果 229.0.0.20 它没有显示错误...但它应该抛出一个错误 不要忘记额外的括号...使用if((isNAN(ipArray[0])||ipArray[0]<224||ipArray[0]>239)&&v!="225.225.225.0"&&v!="229.0.0.20")
作为你的if语句。看看这是否有效。 (先打字错误)
是的,我已经正确地编写了它,但是为什么这段代码不起作用我不知道 if((isNaN(ipArray[0])239) && v!=" 225.225.225.0" && v!="229.0.0.20") isIP=false;
请复制粘贴我的代码,而不是重新输入。您提供的代码不正确,请查看isNAN(ipArray[0])||ipArray[0]<224
位。另外,请在反引号之间放置代码,例如 `this`(变为 this
)。 (不是撇号,而是键盘上实际指向左侧的撇号)【参考方案2】:
“简单”正则表达式,例如 /^(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
【讨论】:
“简单的正则表达式”,你想骗谁? (我开玩笑,我开玩笑)。 如果您正在测试单个字符串值,则不需要/g
, (global), 选项。以上是关于如何验证广播 IP 地址?的主要内容,如果未能解决你的问题,请参考以下文章