我正在使用javascript进行ip v4验证程序。
ip必须介于1.0.0.0
到255.255.255.255
之间
我的问题是我也得到0.0.0.0
而不应该接受它。
我告诉你我的正则表达式:
Var Expression1 = new RegExp ("[0-9] | [1-9] [0-9] | 1 [0-9] {2} | 2 [0-4] [0-9] | 25 [0-5]) [3] ([0-9] | [1-9] [0-9] | 1 [0-9] {2} | 2 [0-4] [0-9] ] | 25 [0-5]) $ ");
谢谢!
答案 0 :(得分:0)
添加"不是0.0.0.0"在行的开头有负面的lookbehind(^(?!0\.0\.0\.0)
):
^(?!0\.0\.0\.0)(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$
演示:https://regex101.com/r/dIkHRJ/2
P.S。
请注意你的正则表达式是不完整和破碎的。使用上面样本中的更正的一个。
答案 1 :(得分:0)
为什么不使用函数,不使用正则表达式会更清楚:
function validateIP(ip) {
var p = ip.split('.'); // split it by '.'
if(p.length !== 4) return false; // if there is not for parts => false
for(var i = 0; i < 4; i++) // for each part
if(isNaN(p[i]) || i < 0 || i > 255) return false; // if it's not a number between 0 - 255 => false
return p[3] > 0; // return true if the last part is not 0, false otherwise
}
alert(validateIP(prompt("IP: ")));
答案 2 :(得分:0)
使用RegExp.prototype.test()
,String.prototype.split()
和Array.prototype.every()
函数的更准确的解决方案:
var re = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/,
validateIPv4 = function(ip) {
return re.test(ip) && ip.split('.').every(function(d, idx){
var octet = Number(d);
if (idx === 0) {
return octet > 0;
}
return 0 <= octet && octet <= 255;
});
};
console.log(validateIPv4('0.0.0.0'));
console.log(validateIPv4('1.0.0.0'));
console.log(validateIPv4('127.0.0.1'));
console.log(validateIPv4('255.255.255.255'));
&#13;