IPV4地址的正则表达式给出无效响应

时间:2016-04-15 21:51:33

标签: javascript regex

我想过滤所有IPV4地址

var regex = new RegExp(/^([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])$/);

regex.test('140.1.2.3');   // gives false should give true

第一项中的任何0都给出错误的

需要改变什么?

1 个答案:

答案 0 :(得分:1)

如果您有IPv4地址列表,并且想要将其过滤掉,则不需要花哨的验证样式正则表达式。以下是针对您的案例修改后的Ben Mc Cormick's function

function checkIsIPV4(entry) {
  if (entry === "0.0.0.0" || entry === "255.255.255.255") {
    return false;
  }
  var blocks = entry.split(".");
  if(blocks.length === 4) {
    return blocks.every(function(block) {
      return parseInt(block,10) >=0 && parseInt(block,10) <= 255;
    });
  }
  return false;
}
var strs = ["100.1.2.3", "0.0.0.0", "0.0.0.1", "255.255.255.254", "255.255.255.255", "255.255.255.256"];
for (var s of strs) {
  document.body.innerHTML += s + ": " + checkIsIPV4(s) + "<br/>";
}

如果你真的需要使用一个匹配所有IP地址的验证样式正则表达式,不包括所有零和所有255

var re = /^(?!(?:0(?:\.0){3}|255(?:\.255){3})$)([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])$/;

请参阅regex demo

最初,当你在正则表达式文字中需要单个反斜杠时,你有双反斜杠。请注意,这是一个否定前瞻(?!(?:0(?:\.0){3}|255(?:\.255){3})$),不允许0.0.0.0255.255.255.255