Мне нужен плагин IP Mask JQuery

Есть ли хороший IP-маска для JQuery? Я пробовал Masked Input Plugin, но не IP-адреса с менее чем 12 цифрами. Затем я пробовал meioMask, и это не работает с менее чем 12 цифрами. Любые предложения?

Ответы

Ответ 2

Это более старое сообщение, однако для тех, кто хочет простой способ манипулировать несколькими входами, без использования плагина расширения или беспокоиться о документации или методах, вот простой метод выбора класса, который делает все это для вас. Его IPv4 только, но это звучит так, как ваши потребности довольно просты.

//jQuery 1.9+ selector pattern,
//To get working with an older version
//Swap first line to $(".ip").bind('keydown',function(e){
//To get working with jQuery versions support .live
//$(".ip").live('keydown',function(e){
$(document).on('keydown',".ip",function(e){
    var code = e.keyCode || e.which;
    var sections = $(this).val().split('.');
    //Only check last section!
    var isInt       = ((code >= 48 && code <= 57) || (code >= 96 && code <= 105));
    var hasSlash    = $(this).val().indexOf("/") == -1;
    if(isInt){
        if(hasSlash){
            if(sections.length < 4){
                //We can add another octet
                var val = parseInt(sections[sections.length-1]+String.fromCharCode(code));
                if(val > 255 || parseInt(sections[sections.length-1]) == 0){
                    $(this).val($(this).val()+"."+String.fromCharCode(code));
                    return false;
                }
                return true;
            } else {
                //Lets prevent string manipulations, our string is long enough
                var val = parseInt(sections[sections.length-1]+String.fromCharCode(code));
                if(val > 255 || parseInt(sections[sections.length-1]) == 0){
                    return false;
                }
                return true;
            }
        } else {
            var cidr_split = $(this).val().split('/');
            var target_val = parseInt(cidr_split[1]+String.fromCharCode(code));
            return (target_val < 33 && target_val.toString().length < 3 && parseInt(cidr_split[1]) != 0);
        }
    } else if(code == 191){
        //CIDR Slash
        return ($(this).val().indexOf("/") == -1);
    } else if(code == 8 || code == 46 || code == 9 || code == 13){
        return true;
    }
    return false
});

Чтобы сломать это для понимания, вы привязываете класс "ip" на своем входе, он будет обрабатывать все остальное автоматически: D Эта версия поддерживает нотацию CIDR (например: 192.168.1.1/16), она разрешает только действительные адреса input, чтобы удалить функцию CIDR, которую вы можете использовать, используйте следующий фрагмент (не тестировался)

//jQuery 1.9+ selector pattern,
//To get working with an older version
//Swap first line to $(".ip").bind('keydown',function(e){
//To get working with jQuery versions support .live
//$(".ip").live('keydown',function(e){
$(document).on('keydown',".ip",function(e){
    var code = e.keyCode || e.which;
    var sections = $(this).val().split('.');
    //Only check last section!
    var isInt       = ((code >= 48 && code <= 57) || (code >= 96 && code <= 105));
    if(isInt){
        if(sections.length < 4){
            //We can add another octet
            var val = parseInt(sections[sections.length-1]+String.fromCharCode(code));
            if(val > 255 || parseInt(sections[sections.length-1]) == 0){
                $(this).val($(this).val()+"."+String.fromCharCode(code));
                return false;
            }
            return true;
        } else {
            //Lets prevent string manipulations, our string is long enough
            var val = parseInt(sections[sections.length-1]+String.fromCharCode(code));
            if(val > 255 || parseInt(sections[sections.length-1]) == 0){
                return false;
            }
            return true;
        }
    } else if(code == 8 || code == 46 || code == 9 || code == 13){
        return true;
    }
    return false
});

Я предоставляю код здесь для двух целей: 1) Это то, что, я считаю, нужно решать, 2) я надеюсь внести свой вклад в мир

Фрагмент не предназначен для раздвигания и поддержки IPv6, если вам нужна поддержка IPv6, см. https://code.google.com/p/jquery-input-ip-address-control/, который предложил anyulled.

Но помимо сложного синтаксиса он разбивает октеты отдельно и проверяет только "активный" октет, он поддерживает любой VALID-адрес (0.0.0.0, 0.0.0.0/0, ect), поэтому используйте разумно, чтобы он не делал любая экстраординарная проверка, кроме предотвращения недопустимого ввода. Если вы ищете контролер, см. Сообщение Сантьяго Эльвиры Рамирес о проверке IP-адреса.

Ответ 4

Рабочие примеры из Masked Input Plugin -
http://digitalbush.com/projects/masked-input-plugin/

Не менее 12 символов:

jQuery(function($){
   $("#date").mask("99/99/9999");
   $("#phone").mask("(999) 999-9999");
   $("#tin").mask("99-9999999");
   $("#ssn").mask("999-99-9999");
});

У них есть рабочие примеры, которые отлично работают?

Что это за проблема, и можете ли вы более подробно размещать информацию?

jQuery(function($){
    $("#MyElementID").mask("10.0.0.0"); //Does this not work?
});

Вы пытаетесь отыграть 1-3 цифры в каждом поле?

например, чтобы иметь возможность.

$("#MyElementID").mask("1.0.0.0"); //this
$("#MyElementID").mask("10.10.10.10"); //or this
$("#MyElementID").mask("100.100.100.100"); //or this

Если вы более наглядны, вы можете получить помощь.

Если вы после этого, вы можете попробовать что-то более простое, используя водяные знаки окна ввода, а не принуждение маски, так что вы можете варьировать числа, которые можно ввести. См. JQuery-Watermark - http://code.google.com/p/jquery-watermark/

Ответ 5

я нашел это, и вам не нужно устанавливать плагины

function fnValidateIPAddress(ipaddr) {
    //Remember, this function will validate only Class C IP.
    //change to other IP Classes as you need
    ipaddr = ipaddr.replace( /\s/g, "") //remove spaces for checking
    var re = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/; //regex. check for digits and in
                                          //all 4 quadrants of the IP
    if (re.test(ipaddr)) {
        //split into units with dots "."
        var parts = ipaddr.split(".");
        //if the first unit/quadrant of the IP is zero
        if (parseInt(parseFloat(parts[0])) == 0) {
            return false;
        }
        //if the fourth unit/quadrant of the IP is zero
        if (parseInt(parseFloat(parts[3])) == 0) {
            return false;
        }
        //if any part is greater than 255
        for (var i=0; i<parts.length; i++) {
            if (parseInt(parseFloat(parts[i])) > 255){
                return false;
            }
        }
        return true;
    } else {
        return false;
    }
}