javascript正则expression式来检查IP地址

我有几个IP地址,如:

  1. 115.42.150.37
  2. 115.42.150.38
  3. 115.42.150.50

如果我想search所有3个IP地址,我应该写什么types的正则expression式? 例如,如果我做115.42.150.* (我将能够search所有3个IP地址)

我现在可以做的是这样的:/[ /[0-9]{1-3}\.[0-9]{1-3}\.[0-9]{1-3}\.[0-9]{1-3}/但它似乎无法正常工作。

谢谢。

你已经得到的正则expression式有几个问题:

首先,它包含点。 在正则expression式中,一个点意味着“匹配任何字符”,在那里你只需要匹配一个实际的点。 为此,你需要逃避它,所以在点的前面加一个反斜杠。

其次,但是你匹配每个部分的任何三位数字。 这意味着您将匹配0到999之间的任何数字,这显然包含大量无效的IP地址号码。

这可以通过使数字匹配更复杂来解决; 在这个网站上还有其他答案解释了如何做到这一点,但坦率地说,这是不值得的努力 – 在我看来,你会更好地分割string的点,然后只是validation四个块作为数字整数范围 – 即:

 if(block > 0 && block <256) {....} 

希望有所帮助。

可能会迟到,但有人可以尝试:

有效IP地址的示例

 115.42.150.37 192.168.0.1 110.234.52.124 

无效IP地址示例

 210.110 – must have 4 octets 255 – must have 4 octets yyyy – only digits are allowed 255.0.0.y – only digits are allowed 666.10.10.20 – octet number must be between [0-255] 4444.11.11.11 – octet number must be between [0-255] 33.3333.33.3 – octet number must be between [0-255] 

validationIP地址的JavaScript代码

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

试试这个,它是一个较短的版本:

 ^(?!0)(?!.*\.$)((1?\d?\d|25[0-5]|2[0-4]\d)(\.|$)){4}$ 

解释:

 ^ start of string (?!0) Assume IP cannot start with 0 (?!.*\.$) Make sure string does not end with a dot ( ( 1?\d?\d| A single digit, two digits, or 100-199 25[0-5]| The numbers 250-255 2[0-4]\d The numbers 200-249 ) \.|$ the number must be followed by either a dot or end-of-string - to match the last number ){4} Expect exactly four of these $ end of string 

浏览器控制台的unit testing:

 var rx=/^(?!0)(?!.*\.$)((1?\d?\d|25[0-5]|2[0-4]\d)(\.|$)){4}$/; var valid=['1.2.3.4','11.11.11.11','123.123.123.123','255.250.249.0','1.12.123.255','127.0.0.1','1.0.0.0']; var invalid=['0.1.1.1','01.1.1.1','012.1.1.1','1.2.3.4.','1.2.3\n4','1.2.3.4\n','259.0.0.1','123.','1.2.3.4.5','.1.2.3.4','1,2,3,4','1.2.333.4','1.299.3.4']; valid.forEach(function(s){if (!rx.test(s))console.log('bad valid: '+s);}); invalid.forEach(function(s){if (rx.test(s)) console.log('bad invalid: '+s);}); 

试试这个..从这里来源。

 "\b(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]?)\b" 

如果你想在现代浏览器中使用比正则expression式更可读的ipv4,你可以使用它

 function checkIsIPV4(entry) { var blocks = entry.split("."); if(blocks.length === 4) { return blocks.every(function(block) { return parseInt(block,10) >=0 && parseInt(block,10) <= 255; }); } return false; } 

如果您正在使用nodejs,请尝试:

require('net').isIP('10.0.0.1')

doc net.isIP()

IP地址格式的正则expression式:

 /^(\d\d?)|(1\d\d)|(0\d\d)|(2[0-4]\d)|(2[0-5])\.(\d\d?)|(1\d\d)|(0\d\d)|(2[0-4]\d)|(2[0-5])\.(\d\d?)|(1\d\d)|(0\d\d)|(2[0-4]\d)|(2[0-5])$/; 

而不是

 {1-3} 

你应该放

 {1,3} 
 \b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b 

匹配0.0.0.0到999.999.999.999使用,如果你知道seachdata不包含无效的IP地址

 \b(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]?)\b 

用于匹配IP号码与准确性 – 4个号码中的每一个号码都存储在自己的捕获组中,以便稍后访问它们

这也许更好:

 function checkIP(ip) { var x = ip.split("."), x1, x2, x3, x4; if (x.length == 4) { x1 = parseInt(x[0], 10); x2 = parseInt(x[1], 10); x3 = parseInt(x[2], 10); x4 = parseInt(x[3], 10); if (isNaN(x1) || isNaN(x2) || isNaN(x3) || isNaN(x4)) { return false; } if ((x1 >= 0 && x1 <= 255) && (x2 >= 0 && x2 <= 255) && (x3 >= 0 && x3 <= 255) && (x4 >= 0 && x4 <= 255)) { return true; } } return false; } 
 /^(?!.*\.$)((?!0\d)(1?\d?\d|25[0-5]|2[0-4]\d)(\.|$)){4}$/ 

充分相信oriadam 。 我会在他/她的答案下面提出评论,build议我做出双零改变,但是我在这里还没有足够的声望。

改变

  • – (?!0)由于以0开始的IPv4地址('0.248.42.223')是有效的 ( 但不可

  • +(?!0 \ d)因为具有前导零('63 .14.209.00'和'011.012.013.014')的IPv4地址有时可以被解释为八进制

如果你使用正确的代码,你只需要这个非常简单的正则expression式:/ \ d {1,3} /

 function isIP(ip) { let arrIp = ip.split("."); if (arrIp.length !== 4) return "Invalid IP"; let re = /\d{1,3}/; for (let oct of arrIp) { if (oct.match(re) === null) return "Invalid IP" if (Number(oct) < 0 || Number(oct) > 255) return "Invalid IP"; } return "Valid IP"; } 

但实际上,通过不使用任何正则expression式,您甚至可以获得更简单的代码:

 function isIp(ip) { var arrIp = ip.split("."); if (arrIp.length !== 4) return "Invalid IP"; for (let oct of arrIp) { if ( isNaN(oct) || Number(oct) < 0 || Number(oct) > 255) return "Invalid IP"; } return "Valid IP"; } 

不要写自己的正则expression式或复制粘贴! 从npm使用is-ip

 var isIp = require('is-ip'); isIp('192.168.0.1'); 

将返回一个布尔值。