regex 如何阻止正则表达式在按下Ctrl、Shift等键时拾取字符匹配?

nbysray5  于 2023-01-27  发布在  其他
关注(0)|答案(1)|浏览(78)

我的任务是编写一个代码,当一个键被按下时,它会记录输入的字符数,我决定使用var regex=/[a-zA-Z0-9]/;,但令我惊讶的是,当我按Enter、Shift、Ctrl或Alt时,它会记录所有这些键。
下面是重要的代码片段:

window.onload = init;

function init() {
    window.onkeyup = incrementKey;
}

function incrementKey() {
    console.log(event.key)

    var regex=/[a-zA-Z0-9]/;

    if (event.key.match(regex)) {
        console.log(event.key)
    }
}

这样,如果被regex选中,我会看到字符显示两次,如果没有,我会看到一次。我已经在W3Schools documentation on RegExp上尝试了几乎所有的方法。
我尝试过的事情:[A-Za-z0-9][^\n](还尝试了\0\n\f\r\t\v)、[\w][](显然,至少在这里,它没有注册任何密钥)。
我想知道如何排除不改变文本上下文的字符,而不是手动键入每个字符。

cnh2zyt3

cnh2zyt31#

如果你想用一个正则表达式来过滤掉a-zA-Z 0 -9字符,那么你原来的几乎正确的你寻找的是^[a-zA-Z0-9]$这个正则表达式将只匹配一个字符;正则表达式中^$之间的任何字符都表示模式必须从字符串的开头开始,并在字符串的结尾结束。您的原始答案失败,因为[a-zA-Z0-9]会搜索字符串中所有一个字符长的字母数字子字符串,显然字符串“Enter”仍然包含字母数字字符,因此您的正则表达式匹配将导致匹配。
你也可以考虑使用regex.test(str),因为它返回一个布尔值,你可以在https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/test阅读更多关于它的内容

相关问题