我有几个 IP 地址,例如:
115.42.150.37
115.42.150.38
115.42.150.50
如果我想搜索所有 3 个 ip 地址,我应该写什么类型的正则表达式?例如,如果我这样做115.42.150.*
(我将能够搜索所有 3 个 IP 地址)
我现在可以做的是:/[0-9]{1-3}\.[0-9]{1-3}\.[0-9]{1-3}\.[0-9]{1-3}/
但它似乎不能很好地工作。
谢谢。
我有几个 IP 地址,例如:
115.42.150.37
115.42.150.38
115.42.150.50
如果我想搜索所有 3 个 ip 地址,我应该写什么类型的正则表达式?例如,如果我这样做115.42.150.*
(我将能够搜索所有 3 个 IP 地址)
我现在可以做的是:/[0-9]{1-3}\.[0-9]{1-3}\.[0-9]{1-3}\.[0-9]{1-3}/
但它似乎不能很好地工作。
谢谢。
可能会迟到,但有人可以尝试:
有效 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
y.y.y.y – 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]
用于验证 IP 地址的 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
浏览器控制台的单元测试:
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);});
你的正则表达式已经有几个问题:
首先,它包含点。在正则表达式中,点表示“匹配任何字符”,您只需要匹配一个实际的点。为此,您需要对其进行转义,因此在点前放置一个反斜杠。
其次,但您要匹配每个部分中的任意三位数字。这意味着您将匹配 0 到 999 之间的任何数字,这些数字显然包含许多无效的 IP 地址编号。
这可以通过使数字匹配更复杂来解决;该站点上还有其他答案解释了如何做到这一点,但坦率地说,这不值得付出努力-在我看来,最好将字符串按点分割,然后仅将四个块验证为数字整数范围——即:
if(block >= 0 && block <= 255) {....}
希望有帮助。
不要编写自己的正则表达式或复制粘贴!您可能不会涵盖所有边缘服务(IPv6,还有八进制 IP 等)。使用is-ip
来自 npm的包:
var isIp = require('is-ip');
isIp('192.168.0.1');
isIp('1:2:3:4:5:6:7:8');
将返回一个布尔值。
Downvoters:注意解释为什么使用积极维护的库比从网站复制粘贴更好?