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

标签 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 都会给出 false

需要改变什么?

最佳答案

如果您有 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/>";
}

如果您确实需要使用验证样式正则表达式来匹配除全零和所有 255 之外的所有 IP 地址:

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

关于javascript - IPV4 地址的正则表达式给出无效响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36657422/

相关文章:

javascript - 为什么 [.\n]+ 不匹配字符串 'a\nb' ?

javascript - 填写后自动提交单一表单输入框

python,我无法在重新搜索后保存特殊字符,例如 θæŋ

java - Java中的正则表达式问题

javascript - 分割错误 : split is not a function

javascript - 如何更改iframe源

python - 清理 xml ==> 如果有空标签则删除行

javascript - 带有正则表达式的文本字段的电话掩码

javascript - HTTP POST 响应在字母之间返回 '\u0' 个字符,如何删除这些字符或在 JavaScript 中解析它们?

javascript - 返回字符串中第一个数字之前出现的所有字母