我一直在研究用于验证 IP 地址格式的正则表达式,尽管我有一个适用于完整 IP 地址的正则表达式(所有 4 个八位字节都有值),但我的要求是能够在 IP 上使用通配符例如 65.66.100.* 或 65.66.*
如何更改下面的函数以包含上面两个示例 IP 将通过的条件?
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)
}
最佳答案
您可以使用此 SO answer 中的正则表达式:
var regex = /^((((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]?))|(((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]?)\.){2}\*)|(((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){1}\*))$/g;
它匹配所有这些方案:
1.2.*
1.2.3.*
1.2.3.4
正则表达式101:https://regex101.com/r/QnfVc4/1
所以你的代码会是这样的:
function ValidateIPaddress(ipaddress) {
if (/^((((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]?))|(((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]?)\.){2}\*)|(((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){1}\*))$/g.test(ipaddress)) {
return (true);
}
alert("You have entered an invalid IP address!")
return (false)
}
演示:
function ValidateIPaddress(ipaddress) {
if (/^((((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]?))|(((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]?)\.){2}\*)|(((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){1}\*))$/g.test(ipaddress)) {
return (true);
}
//alert("You have entered an invalid IP address!")
return (false)
}
console.log("test for 127.0.0.1 ->", ValidateIPaddress("127.0.0.1"))
console.log("test for 127.0.0.* ->", ValidateIPaddress("127.0.0.*"))
console.log("test for 127.0.* ->", ValidateIPaddress("127.0.*"))
console.log("test for 127.* ->", ValidateIPaddress("127.*"))
console.log("test for 127.0 ->", ValidateIPaddress("127.0"))
关于使用通配符获取有效 IP 的 Javascript 和 Regex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44847148/