假设我按下了“。” (键盘上的键码 46)第一次按将显示该字符,第二次按不会显示任何内容,除非您按另一个不同的字符,然后在下一次按时再次显示。
我不太熟悉使用 keypress、keydown、keyup、keycode,但无论什么都可以在纯 JavaScript 中实现。如果可能的话,我需要向后兼容 IE6 的东西,如果不是 IE8 也可以。
简而言之:我需要验证 IP 地址(ipv4)输入,只有当 char 对于 IP 地址特征有效时按键才会起作用,如果可能的话我不想使用弹出消息。
我读过一些有关“模式”的内容并将其与输入相匹配,但除了我不熟悉它之外,我还不确定它是否向后兼容。
这是我到目前为止所做的事情:
- 捕获输入,仅允许数字和点 - 确定
- 如果 > 255 或按下时不会出现空点,则捕获 IP 的第一个 block 工作-好的
- 仅允许陷印 3 个点 - 好的
我被困在按下时不应该允许 2 个连续点的部分上,这就是为什么我无法继续捕获 IP 地址的第二、第三和第四 block 。
我的代码
脚本:
<script type="text/javascript">
function allowNumbersAndDot(e){
var n;
var dot = '.';
var ip = document.getElementById('ipaddr').value;
if (parseInt(ip) < 256 && ip.split(".").length < 4) {
if (ip == dot) {
document.all ? n = e.keyCode : n = e.which;
return (n > 47 && n < 58);
}
else {
document.all ? n = e.keyCode : n = e.which;
return ((n > 47 && n < 58) || n == 46);
}
}
else {
document.all ? n = e.keyCode : n = e.which;
return (n > 47 && n < 58);
}
}
function handleKeyPress0(e) {
if (allowNumbersAndDot(e) ) {
return true;
} else {
return false;
}
}
</script>
正文:
<body>
<input id="ipaddr" type="text" title="enter ip address" name="ipaddr" onfocus="this.value=''" maxlength="15" onkeypress="return handleKeyPress0(event);" />
<input id="pingbtn" type="submit" value="PING"/>
</body>
最佳答案
我会创建一个对于任何有效的部分 IP 地址返回 true 的正则表达式,然后在每次按键时检查新值是否仍然有效。
function handleKeyPress0(e) {
let regex = /^(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]?))?)?)?)?)?)?$/;
return regex.test(e.target.value + String.fromCharCode(e.keyCode));
}
<input id="ipaddr" type="text" title="enter ip address" name="ipaddr" onfocus="this.value=''" maxlength="15" onkeypress="return handleKeyPress0(event);" />
<input id="pingbtn" type="submit" value="PING"/>
关于javascript - 如果该字符与第一个输出的字符相同,如何防止显示第二个按键的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61660193/