我有几个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}/
,但似乎效果不佳。
感谢。
答案 0 :(得分:83)
可能会迟到但有人可以尝试:
有效的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)
}
答案 1 :(得分:36)
试试这个,这是一个较短的版本:
^(?!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);});
答案 2 :(得分:16)
你已经有的正则表达式有几个问题:
首先,它包含点。在正则表达式中,点表示“匹配任何字符”,您只需匹配实际点。为此,你需要逃脱它,所以在点前放一个反斜杠。
其次,但您在每个部分中匹配任何三位数字。这意味着您将匹配0到999之间的任何数字,这显然包含许多无效的IP地址编号。
这可以通过使数字匹配更复杂来解决;在这个网站上有其他答案解释如何做到这一点,但坦率地说,这是不值得的 - 在我看来,你最好用点分割字符串,然后只是将四个块验证为数字整数范围 - 即:
if(block > 0 && block <256) {....}
希望有所帮助。
答案 3 :(得分:15)
答案 4 :(得分:15)
试试这个..来自here的来源。
"\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"
答案 5 :(得分:9)
如果你想在现代浏览器中为ipv4使用比regex更具可读性的东西,你可以使用
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;
}
答案 6 :(得分:4)
/^(?!.*\.$)((?!0\d)(1?\d?\d|25[0-5]|2[0-4]\d)(\.|$)){4}$/
完全归功于oriadam。我会在他/她的回答下面评论我建议的双零改变,但我在这里还没有足够的声誉......
更改强>:
- (?!0)因为以零开头的IPv4地址('0.248.42.223')有效(but not usable)
+(?!0 \ d)因为带有前导零('63 .14.209.00'和'011.012.013.014')的IPv4地址可以sometimes be interpreted as octal
答案 7 :(得分:3)
不要编写自己的正则表达式或复制粘贴!您可能不会涵盖所有边缘请求(IPv6,但也包括八进制IP等)。使用来自npm的is-ip
:
var isIp = require('is-ip');
isIp('192.168.0.1');
将返回一个布尔值。
Downvoters :谨慎解释为什么使用积极维护的库比从网站复制粘贴更好?
答案 8 :(得分:3)
IP地址格式的正则表达式:
/^(\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])$/;
答案 9 :(得分:2)
而不是
{1-3}
你应该把
{1,3}
答案 10 :(得分:2)
如果您使用正确的代码,则只需要这个非常简单的正则表达式:/ \ 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";
}
但实际上,你根本不使用任何正则表达式来获得更简单的代码:
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";
}
答案 11 :(得分:2)
简单方法
const invalidIp = ipAddress
.split(".")
.map(ip => Number(ip) >= 0 && Number(ip) <= 255)
.includes(false);
if(invalidIp){
// IP address is invalid
// throw error here
}
答案 12 :(得分:2)
投入较晚的贡献:
^(?!\.)((^|\.)([1-9]?\d|1\d\d|2(5[0-5]|[0-4]\d))){4}$
在我检查的答案中,他们的验证时间更长或更不完整。根据我的经验,更长的时间意味着更难以忽视,因此更容易出错。而且我喜欢避免重复类似的模式,出于同样的原因。
当然,主要部分是对数字的测试 - 0到255,但也要确保它不允许初始零(除非它是单个的):
[1-9]?\d|1\d\d|2(5[0-5]|[0-4]\d)
三个替换 - 一个用于子100:[1-9]?\d
,一个用于100-199:1\d\d
,最后是200-255:2(5[0-5]|[0-4]\d)
。
之前是行开头 或点.
的测试,此整个表达式由附加的{{测试4次1}}。
这个完整的四字节表示测试是通过测试行的开始,然后是负向预测来开始的,以避免地址以{4}
:.
开头,最后以测试结束line(^(?!\.)
)。
答案 13 :(得分:2)
我的版本为es6方法,有效IP返回true,否则返回
isIP(ip) {
if (typeof(ip) !== 'string')
return false;
if (!ip.match(/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/)) {
return false;
}
return ip.split('.').filter(octect => octect >= 0 && octect <= 255).length === 4;
}
答案 14 :(得分:2)
简短的RegEx:const isValidIp = value => (/^(?:(?:^|\.)(?:2(?:5[0-5]|[0-4]\d)|1?\d?\d)){4}$/.test(value) ? true : false);
// valid
console.log("isValidIp('0.0.0.0') ? ", isValidIp('0.0.0.0'));
console.log("isValidIp('115.42.150.37') ? ", isValidIp('115.42.150.37'));
console.log("isValidIp('192.168.0.1') ? ", isValidIp('192.168.0.1'));
console.log("isValidIp('110.234.52.124' ? ", isValidIp('110.234.52.124'));
console.log("isValidIp('115.42.150.37') ? ", isValidIp('115.42.150.37'));
console.log("isValidIp('115.42.150.38') ? ", isValidIp('115.42.150.38'));
console.log("isValidIp('115.42.150.50') ? ", isValidIp('115.42.150.50'));
// Invalid
console.log("isValidIp('210.110') ? ", isValidIp('210.110'));
console.log("isValidIp('255') ? ", isValidIp('255'));
console.log("isValidIp('y.y.y.y' ? ", isValidIp('y.y.y.y'));
console.log(" isValidIp('255.0.0.y') ? ", isValidIp('255.0.0.y'));
console.log("isValidIp('666.10.10.20') ? ", isValidIp('666.10.10.20'));
console.log("isValidIp('4444.11.11.11') ? ", isValidIp('4444.11.11.11'));
console.log("isValidIp('33.3333.33.3') ? ", isValidIp('33.3333.33.3'));
示例
report = my_data.groupby(["cod"], as_index = False)[['N%', 'P%','K%', 'Ca%', 'Mg%', 'S%',
'Fe mg/kg', 'Mn mg/kg', 'Zn mg/kg', 'Cu mg/kg',
'B mg/kg', 'Na mg/kg']].mean()
答案 15 :(得分:2)
以下解决方案不接受填充零
这是验证IP地址的最干净的方法,让我们对其进行分解:
事实:有效的IP地址具有4 octets
,每个八位字节可以是0 - 255
之间的数字
正则表达式的分解。
25[0-5]
匹配250 - 255
2[0-4][0-9]
匹配200 - 249
1[0-9][0-9]
匹配100 - 199
[1-9][0-9]?
匹配1 - 99
0
匹配0
注意:在使用new RegExp
时,您应该使用\\.
而不是\.
,因为字符串将两次转义。
function isValidIP(str) {
const octet = '(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]?|0)';
const regex = new RegExp(`^${octet}\\.${octet}\\.${octet}\\.${octet}$`);
return regex.test(str);
}
答案 16 :(得分:0)
一直在寻找变化,似乎是一个重复的任务,所以如何使用forEach!
function checkIP(ip) {
//assume IP is valid to start, once false is found, always false
var test = true;
//uses forEach method to test each block of IPv4 address
ip.split('.').forEach(validateIP4);
if (!test)
alert("Invalid IP4 format\n"+ip)
else
alert("IP4 format correct\n"+ip);
function validateIP4(num, index, arr) {
//returns NaN if not an Int
item = parseInt(num, 10);
//test validates Int, 0-255 range and 4 bytes of address
// && test; at end required because this function called for each block
test = !isNaN(item) && !isNaN(num) && item >=0 && item < 256 && arr.length==4 && test;
}
}
答案 17 :(得分:0)
答案允许IP地址前导零,这是不正确的。 例如(“123.045.067.089”应该返回false)。
这样做的正确方法。
function isValidIP(ipaddress) {
if (/^(25[0-5]|2[0-4][0-9]|[1]?[1-9][1-9]?)\.(25[0-5]|2[0-4][0-9]|[1]?[1-9][1-9]?)\.(25[0-5]|2[0-4][0-9]|[1]?[1-9][1-9]?)\.(25[0-5]|2[0-4][0-9]|[1]?[1-9][1-9]?)$/.test(ipaddress)) {
return (true)
}
return (false) }
此功能不允许零前导 IP 地址。
答案 18 :(得分:0)
这就是我所做的,并且快速且完美:
function isIPv4Address(inputString) {
let regex = new RegExp(/^(([0-9]{1,3}\.){3}[0-9]{1,3})$/);
if(regex.test(inputString)){
let arInput = inputString.split(".")
for(let i of arInput){
if(i.length > 1 && i.charAt(0) === '0')
return false;
else{
if(parseInt(i) < 0 || parseInt(i) >=256)
return false;
}
}
}
else
return false;
return true;
}
说明:首先,使用正则表达式检查IP格式是否正确。虽然,正则表达式不会检查任何值范围。
我的意思是,如果您可以使用Javascript管理正则表达式,为什么不使用它呢?因此,不要使用疯狂的正则表达式,而仅使用正则表达式来检查格式是否正确,然后检查八位位组中的每个值都在正确的值范围内(0到255)。希望这对其他人有帮助。和平。
答案 19 :(得分:0)
\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号码与accurracy匹配 - 4个号码中的每一个都存储在其自己的捕获组中,因此您可以稍后访问它们
答案 20 :(得分:0)
可能更好:
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;
}
答案 21 :(得分:-1)
在测试类型而不是有效性时不那么严格。例如,在排序列时,使用此检查来查看要使用的排序。
export const isIpAddress = (ipAddress) =>
/^((\d){1,3}\.){3}(\d){1,3}$/.test(ipAddress)
检查有效性时,请使用此测试。更严格的测试检查IP 8位数字在0-255范围内:
export const isValidIpAddress = (ipAddress) =>
/^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(ipAddress)