javascript正则expression式来检查IP地址
我有几个IP地址,如:
115.42.150.37
-
115.42.150.38
-
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');
将返回一个布尔值。