使用通配符实现有效IP的Javascript和Regex

时间:2017-06-30 13:01:50

标签: javascript regex

我一直在寻找用于验证IP地址格式的正则表达式,虽然我有一个适用于完整IP地址(所有4个八位字节都有值),我的要求是能够在IP上使用通配符例如65.66.100。*或65.66。*

如何更改以下函数以包含上述两个示例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)  
}  

3 个答案:

答案 0 :(得分:0)

这个正则表达式应该做你想要的:

^(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]?)|\*)|\*)$

要将其分解,我在当前正则表达式的末尾添加了两个|。最后一个验证最后一个点之后是否存在数字或*,并且验证最后两个字节是否为当前数字形式,或者只是*

您可以在此处验证其行为:https://regex101.com/r/jFq85T/1

答案 1 :(得分:0)

这个应该符合您的需求:

^(?=(?:[^.]*\.){2,3}[^.]*$)(?: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]?)){1,3}(?:\.\*)?$

Demo

答案 2 :(得分:0)

您可以使用此SO answer

中的此正则表达式
var regex = /^((((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(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]?)\.){3}\*)|(((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){2}\*)|(((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){1}\*))$/g;

它匹配所有这些方案:

1.2.*
1.2.3.*
1.2.3.4

Regex101:https://regex101.com/r/QnfVc4/1

所以你的代码就像这样:

function ValidateIPaddress(ipaddress) {  
  if (/^((((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(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]?)\.){3}\*)|(((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){2}\*)|(((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){1}\*))$/g.test(ipaddress)) {  
    return (true);
  }  
  alert("You have entered an invalid IP address!")  
  return (false)  
}

演示:

function ValidateIPaddress(ipaddress) {  
  if (/^((((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(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]?)\.){3}\*)|(((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){2}\*)|(((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){1}\*))$/g.test(ipaddress)) {  
    return (true);
  }  
  //alert("You have entered an invalid IP address!")  
  return (false)  
}

console.log("test for 127.0.0.1 ->", ValidateIPaddress("127.0.0.1"))
console.log("test for 127.0.0.* ->", ValidateIPaddress("127.0.0.*"))
console.log("test for 127.0.* ->", ValidateIPaddress("127.0.*"))
console.log("test for 127.* ->", ValidateIPaddress("127.*"))
console.log("test for 127.0 ->", ValidateIPaddress("127.0"))