IP地址验证,中间有适当的点

时间:2013-08-01 06:49:26

标签: javascript jquery logic

我想仅验证IP地址,只接受一些数字后的3个三点

例如: 有效:191.123.121.202有效,在小数点后有3个点。 无效:191..123.121.202无效,其中2个点顺序

全点:想要一个强大的IP验证器

$("input.onlynumberdecimal").keydown(function (event) {

        console.log(event.keyCode);

        if (event.shiftKey == true) {
            event.preventDefault();
        }

        if ((event.keyCode >= 48 && event.keyCode <= 57) || 
            (event.keyCode >= 96 && event.keyCode <= 105) || 
            event.keyCode == 8 || event.keyCode == 9 || event.keyCode == 37 ||
            event.keyCode == 39 || event.keyCode == 46 || event.keyCode == 190) {

        } else {
            event.preventDefault();
        }

        if($(this).val().indexOf('.') !== -1 && event.keyCode == 190)
            event.preventDefault(); 
        //if a decimal has been added, disable the "."-button

    });

在某种程度上,我得到了其他一些网站的帮助。并且还希望如果用户复制并粘贴正确的IP,那么它应该接受,否则它不应该允许他粘贴。

DEMO

9 个答案:

答案 0 :(得分:8)

DEMO

试试这个

var pattern = /\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/;
x = 46;
$('input[type="text"]').keypress(function (e) {
    if (e.which != 8 && e.which != 0 && e.which != x && (e.which < 48 || e.which > 57)) {
        console.log(e.which);
        return false;
    }
}).keyup(function () {
    var this1 = $(this);
    if (!pattern.test(this1.val())) {
        $('#validate_ip').text('Not Valid IP');
        while (this1.val().indexOf("..") !== -1) {
            this1.val(this1.val().replace('..', '.'));
        }
        x = 46;
    } else {
        x = 0;
        var lastChar = this1.val().substr(this1.val().length - 1);
        if (lastChar == '.') {
            this1.val(this1.val().slice(0, -1));
        }
        var ip = this1.val().split('.');
        if (ip.length == 4) {
            $('#validate_ip').text('Valid IP');
        }
    }
});

使用端口号验证IP地址的更新。

实施例。 192.168.2.100:27896

var pattern = /\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]?)\:([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])\b/;
x = 46;
$('input[type="text"]').keypress(function (e) {
    console.log(e.which);
    if (e.which != 8 && e.which != 0 && e.which != x && e.which !=58 && (e.which < 48 || e.which > 57)) {
        console.log(e.which);
        return false;
    }
}).keyup(function () {
    var this1 = $(this);
    if (!pattern.test(this1.val())) {
        $('#validate_ip').text('Not Valid IP');
        while (this1.val().indexOf("..") !== -1) {
            this1.val(this1.val().replace('..', '.'));
        }
        x = 46;
    } else {
        x = 0;
        var lastChar = this1.val().substr(this1.val().length - 1);
        if (lastChar == '.') {
            this1.val(this1.val().slice(0, -1));
        }
        var ip = this1.val().split('.');
        if (ip.length == 4) {
            $('#validate_ip').text('Valid IP');
        }
    }
});

WORKING FIDDLE

答案 1 :(得分:3)

使用正则表达式和ipv4地址的正则表达式

/((25 [0-5] | 2 [0-4] [0-9] | [01] [0-9] [0-9])(|?。$)){4} /

function validateIP(ipAddress){ ipv4Re = new RegExp('^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.|$)){4}', 'i'); if(ipv4Re.test(ipAddress)){ return "its a vaild address"} else return "its an invalid address"}

它将验证:

  • 0.0.0.0
  • 255.255.255.255
  • 191.123.121.202

并且无效:   - 191..123.121.202

答案 2 :(得分:1)

function isIpAddress(s) {
  if (typeof s !== 'string') { return false; }
  // There must be 4 parts separated by dots.
  var parts = s.split('.');
  if (parts.length !== 4) { return false; }
  // Each of the four parts must be an integer in the range 0 to 255.
  for (var i = 0; i < 4; ++i) {
    var part = parts[i];
    // Each part must consist of 1 to 3 decimal digits.
    if (!/^\d{1,3}$/.test(part)) { return false; }
    var n = +part;
    if (0 > n || n > 0xff) { return false; }
  }
  return true;
}

答案 3 :(得分:0)

试试这个。

<SCRIPT language="JavaScript">
function verifydata( incoming )
{
    errorlog = ""

    // CHECK ALL THE FIELDS TO VERIFY THEIR EXISTENCE
    if ( incoming.ipstart.value == "" )
        errorlog += "Starting IP Address is blank.\n"
    if ( incoming.ipend.value == "" )
        errorlog += "Ending IP Address is blank.\n"
    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]?)$/.test(incoming.ipstart.value) ) )
        errorlog += "Incorrect Starting IP Address Format.\n"
    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]?)$/.test(incoming.ipend.value) ) )
        errorlog += "Incorrect Ending IP Address Format.\n"

}
</SCRIPT>

答案 4 :(得分:0)

OR 您可以使用jQuery Mask Plugin。这么简单易用,它会添加。 (点)和数字的占位符将被标记。

答案 5 :(得分:0)

以下解决方案将验证输入的IP地址值,包括格式&amp;它的价值也是。它将接受最小0.0.0.0和最大255.255.255.255。如果输入的IP地址无效,则代码将以粉红色和高亮显示输入控件。清除文本,否则将保持输入的有效值。

将输入标记放在页面上:

<input type="text" name="IpAddress" id="IpAddress" class="input-medium" onkeypress="return IPAddressKeyOnly(event)" onblur="confirmIPAddress();"/>

在适当的java脚本文件中添加以下方法,或者在页面中包含它。

1)处理按键事件:

function IPAddressKeyOnly(e) {
    var keyCode = e.keyCode == 0 ? e.charCode : e.keyCode;
    if (keyCode != 46 && keyCode > 31 && (keyCode < 48 || keyCode > 57))
       return false;
    return true;
}

2)处理正确的IP地址值验证:

function confirmIPAddress() {
   var ip = document.getElementById("IpAddress");
   if (ip.value.length >0 && ip.value.length<=15 ) { 
      ip.style.background = "white";
      var ipSlot=ip.value.split(".");
      if(ipSlot.length==4){
        for (var i=0;i<ipSlot.length;i++){
        var l=ipSlot[i].length;
            if (l >0 && l<=3){
                if(ipSlot[i]>=0 && ipSlot[i]<256){}
                else{ip.value = "";ip.style.background = "pink";break ;return false;}
            }else{
                ip.value = "";ip.style.background = "pink";break ;return false;
            }
        }
    }else{ip.value = "";ip.style.background = "pink";return false; }
}
else{ip.value = "";ip.style.background = "pink";}

}

答案 6 :(得分:0)

尝试一次。

//Check Format
var ip = ip.split(".");

if (ip.length != 4) {
    return false;
}

//Check Numbers
for (var c = 0; c < 4; c++) {
    //Perform Test
    if(isNaN(parseFloat(ip[c])) || !isFinite(ip[c]) || ip[c] < 0 || ip[c] > 255 || ip[c].indexOf(" ") !== -1 || ip[c].match(/^-\d+$/)){

         return false;
    }
}
return true;

答案 7 :(得分:0)

        //invalid ip send
        ipvalidation('256.0.0.0');

        //ip validation function
        function ipvalidation(x){
            limit = 255; 
            [ii, xx, yy, cc] = x.split('.');
            if(ii <= limit && xx <= limit && yy <= limit && cc <= limit){
                alert('valid ip');
            } else {
                alert('invalid ip');
            }
        }

答案 8 :(得分:0)

不使用正则表达式

只需在其中添加一个稍微冗长一些但仍然很小的实现即可:

let isIpv4 = ip => {
  // Test length to see that we have a valid ipv4 address
  // Must consist of 4 values seperated by .
  // Each char must be a number between 0 and 255 and not empty
  return ip !== '' && ip.split('.').filter( n => ( n !== '' && n >= 0 && n <= 255 ) ).length === 4
}

console.log(isIpv4('192.168.2.1')) // True
console.log(isIpv4('255.255.255')) // False
console.log(isIpv4('255.ab.255.255')) // False