Это более старая статья, однако для тех, кто хочет иметь простой способ манипулирования несколькими входами, не используя громоздкий плагин или не заботясь о документации или методах, вот простой метод выбора класса, который сделает все за вас.Это только 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), она позволяет только вводить действительные адреса, чтобы удалить функцию 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, т. Д.), Поэтому используйте это с умом, это не делает никакой необычной проверки, кроме предотвращения неправильного ввода.Если вы ищете чекер, пожалуйста, посмотрите сообщение Сантьяго Эльвиры Рамирес о валидаторе IP-адреса.