javascript - 不要让用户输入错误的数据 - 改进 IP 地址验证 JavaScript
问题描述
我正在尝试制作一个带掩码的输入字段来输入 IP 地址。我发现的几乎每个解决方案都有缺陷。
这里https://stackoverflow.com/a/55837333是我找到的最佳解决方案,但它仍然允许我输入高于 255 的值。基本上它可以工作,但是当我尝试更改输入的地址时,我可以设置甚至 192.999.1.1
如何重现错误:
输入 IP 地址,例如 192.168.1.1
选择某个部分,例如 192. __168__ .1.1
开始输入数字,你会得到 192. 999 .1.1
如何改进代码来解决这个问题?
这是我使用的代码
// Credits to @t_m27
var options = {
onKeyPress: function(text, event, currentField, options) {
if (text) {
var ipArray = text.split(".");
var lastValue = ipArray[ipArray.length - 1];
if (lastValue != "" && parseInt(lastValue) > 255) {
ipArray[ipArray.length - 1] = '255';
var resultingValue = ipArray.join(".");
currentField.text(resultingValue).val(resultingValue);
}
}
},
translation: {
'Z': {
pattern: /[0-9]/,
optional: true
}
}
};
$(".ipaddr").mask("0ZZ.0ZZ.0ZZ.0ZZ", options);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.mask/1.14.16/jquery.mask.min.js"></script>
<input type="text" class="ipaddr" />
解决方案
像这样的东西?
// Credits to @t_m27
var options = {
onKeyPress: function(text, event, currentField, options) {
if (text) {
var ipArray = text.split(".");
ipArray = ipArray.map(num => num > 255 ? 255 : num)
var resultingValue = ipArray.join(".");
currentField.text(resultingValue).val(resultingValue);
}
},
translation: {
'Z': {
pattern: /[0-9]/,
optional: true
}
}
};
$(".ipaddr").mask("0ZZ.0ZZ.0ZZ.0ZZ", options);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.mask/1.14.16/jquery.mask.min.js"></script>
<input type="text" class="ipaddr" />
推荐阅读
- javascript - 在带有对象(第二个参数)的数组(第一个参数)上使用 for 循环迭代
- typescript - :[Interface] 是 Typescript 中的有效数组定义吗?
- zsh - 在 iTerm/ZSH 中如何绑定 Command-b 向后移动一个单词?
- python - 在文档行中查找字符串,然后从之前的行之一中获取值
- git - 为什么另一行的更改会出现 git merge 冲突?
- azure - TLS1.2 上的 Azure 应用服务到应用服务通信失败
- typescript - i18next:在 TypeScript 中映射对象数组
- javascript - 我的 Discord 机器人多次响应一个命令,我想知道是否有办法只发送一次
- node.js - 套接字 io 在套接字连接时创建房间
- acumatica - Acumatica 中的可搜索用户定义字段