ip v4的正则表达式

时间:2017-03-16 11:27:59

标签: javascript regex

我正在使用javascript进行ip v4验证程序。 ip必须介于1.0.0.0255.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]) $ ");

谢谢!

3 个答案:

答案 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()函数的更准确的解决方案:

&#13;
&#13;
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;
&#13;
&#13;