正则表达式以将 IP 地址与 IP 地址子网中的"x"匹配



目前我们有正则表达式

'/^(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

所以它必须只接受IP中的数字或"x"

提前感谢您的帮助

我想

我跑题了,但你可以避免正则表达式,我相信它不太容易 出错:

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;
}

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

^(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)$

请参阅此演示。

最新更新