如何防止用户输入某些字母?

问题描述 投票:0回答:1
       function NumberKey(event) {
            let charCode = event.which || event.keyCode;
            console.log(event.keyCode)
            if ((charCode >= 48 && charCode <= 57) || //  Number (0-9)
                (charCode >= 96 && charCode <= 105) || // Numberpad (0-9)
                (charCode >=112 && charCode <= 123)|| // F keys (F1~12)
                charCode === 8 || // backspace
                charCode === 9 || // tab
                charCode === 13|| // enter
                charCode === 37 || // arrow left
                charCode === 39 || // arrow right
                charCode === 46){ // delete
            }else{
            event.preventDefault();
            return false;
            }
        }

这是我的代码,用于防止用户输入数字以外的任何内容

当我将其应用为

onkeydown="返回NumberKey(事件)"

{%(带偏移) `qwertyuipasdfgh'zxcvb。 (无班次) +基于输入法的语言 可以打字

onkeypress="返回 NumberKey(事件)"

!@#$%^&*()(带移位) +基于输入法的语言 可以打字

当我同时应用两者时, %(带偏移) +基于输入法的语言 可以打字

我不明白这个结果的某些事情

  1. 为什么 onkeypress 和 onkeydown 会给出不同的结果?

  2. 为什么 onkeypress 让 % 打印出来,而它却阻止了所有其余的特殊字母?

对于另一个问题,我需要帮助

通过控制台,我发现基于 IME 的语言不被算作事件。 我做了一些搜索,发现 IME 将字母作为组合的一部分删除, 最终,在这封信显示在屏幕上之前,我从来没有让我把它拿走。

我知道 input type="password" 会强制禁用 IME, 强制用户仅输入英文。 这很有趣,只是字母被隐藏了, 所以我不能用它们作为电话号码或 ID

尝试过 ime-mode:disabled,发现它很久以前就因为安全问题而被弃用了。

我在网上发现很多人只是让用户输入任何内容 如果键入的项目不满足某些条件,则随后删除, 这绝对不是我想要的...

document.addEventListener('DOMContentLoaded', function() {
    const inputElement = document.getElementById('yourInputElementId');
    inputElement.addEventListener('compositionstart', function(event) {
        event.preventDefault();
    });
    inputElement.addEventListener('compositionupdate', function(event) {
        event.preventDefault();
    });
    inputElement.addEventListener('compositionend', function(event) {
        event.preventDefault();
    });
});

这是ChatGPT建议的,但根本不起作用。

抱歉写得太长了 请帮我!我已经坚持了好几天了!

javascript input keycode ime onkeypress
1个回答
-1
投票

我认为使用正则表达式在这里会有所帮助 - 尽管它有很多自己的特殊语法需要学习/导航。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/test 它可以检测字符、范围、允许它们和不允许它们。

如果不适用或我忽略了某些内容,请道歉

© www.soinside.com 2019 - 2024. All rights reserved.