不要让用户输入错误的数据-改进IP地址验证JavaScript

不要让用户输入错误的数据-改进IP地址验证JavaScript,javascript,jquery,maskedinput,Javascript,Jquery,Maskedinput,我试图制作一个屏蔽输入字段来输入IP地址。我找到的几乎每个解决方案都有缺陷 这是我找到的最好的解决方案,但它仍然允许我输入高于255的值。基本上它可以工作,但当我试图更改输入的地址时,我甚至可以设置192.999.1.1 如何重现错误: 输入IP地址,例如192.168.1.1 选择一些零件,如192.\uu 168\uuu.1.1 开始输入数字,你会得到192.999.1.1 如何改进代码以解决此问题 这是我使用的代码 //@t_m27的学分 变量选项={ onKeyPress:functi

我试图制作一个屏蔽输入字段来输入IP地址。我找到的几乎每个解决方案都有缺陷

这是我找到的最好的解决方案,但它仍然允许我输入高于255的值。基本上它可以工作,但当我试图更改输入的地址时,我甚至可以设置192.999.1.1

如何重现错误:

输入IP地址,例如192.168.1.1

选择一些零件,如192.\uu 168\uuu.1.1

开始输入数字,你会得到192.999.1.1

如何改进代码以解决此问题

这是我使用的代码

//@t_m27的学分 变量选项={ onKeyPress:functiontext、event、currentField、options{ 如果文本{ var ipArray=text.split。; var lastValue=ipArray[ipArray.length-1]; 如果lastValue!=&&parseIntlastValue>255{ ipArray[ipArray.length-1]=“255”; var resultingValue=ipArray.join。; currentField.textresultingValue.valresultingValue; } } }, 翻译:{ “Z”:{ 模式:/[0-9]/,, 可选:true } } }; $.ipaddr.mask0ZZ.0ZZ.0ZZ.0ZZ,选项; 像这样的

//@t_m27的学分 变量选项={ onKeyPress:functiontext、event、currentField、options{ 如果文本{ var ipArray=text.split。; ipArray=ipArray.mapnum=>num>255?255:num var resultingValue=ipArray.join。; currentField.textresultingValue.valresultingValue; } }, 翻译:{ “Z”:{ 模式:/[0-9]/,, 可选:true } } }; $.ipaddr.mask0ZZ.0ZZ.0ZZ.0ZZ,选项;
如果要使用一个函数,如果该函数是有效ip,则返回true,否则返回false,则可以这样使用该函数:

function isValidIp(ip) {
  return !ip.split('.').find(part => part > 255);
}

您可以使用它来显示消息,也可以将输入标记为无效。

使用onchange事件来限制值。例如,如果超出范围,请让您的事件将该值更改为范围内的基本最小值或最大值。谢谢您的回答!现在,当我从192.168.1.1中选择168并尝试设置99时,它给出192.9.91.1。有没有办法修复它?ipArray=ipArray.mapnum=>num>255?255:num;显示语法错误。IE 11Ie11不支持胖箭头-更改功能或升级到edge chromiumVery strange。当我在Mozilla中运行此代码时,作为一个代码片段,我在第一条注释中写下了一个行为。当我在我的项目中运行它时,它就像一个符咒一样工作,但在IE11中不起作用。我已将其更改为ipArray=ipArray.mapfunction num{return num>255?255:num};现在IE只是冻结了,现在我知道IE为什么会冻结了,它总是在currentField.text更新时触发onKeyPress事件