正则表达式匹配IP地址与' x'在ip地址子网中

时间:2017-11-02 13:18:22

标签: javascript regex

目前我们有正则表达式

'/^(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]?)$/'

匹配正确的IP地址但我们的要求是匹配以下格式

  • 123.23.10.x。
  • 123.23.x.x。
  • 123.x.x.x

所以它必须只接受一个数字或' x'在ip

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

我想我是偏离主题但是你可以避免使用正则表达式,我相信它不容易出错:

var ips = [
  "0.0.0.0",
  "0.0.255.0",
  "123.x.x.x",
  "123.y.x.x",
  "0.0.256.0",
  "0.0.-1.0"
];

for (let i = 0; i < ips.length; i++) {
  console.log(validateIp(ips[i]) ? "pass" : "fail", ips[i]);
}

function validateIp (ip) {
  var strings = ip.split(".");
  if (strings.length != 4) return false;
  for (let i = 0; i < strings.length; i++) {
    let octet = parseInt(strings[i], 10);
    if (isNaN(octet) && strings[i] !== "x") {
      return false;
    } else if (octet < 0 || octet > 255) {
      return false;
    }
  }
  return true;
}

答案 1 :(得分:0)

通过在可选类中添加|x,您可以添加匹配x的可能性:

^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|x)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|x)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|x)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|x)$

请参阅this demo