我的任务是编写一个代码,当一个键被按下时,它会记录输入的字符数,我决定使用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]
、[]
(显然,至少在这里,它没有注册任何密钥)。
我想知道如何排除不改变文本上下文的字符,而不是手动键入每个字符。
1条答案
按热度按时间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阅读更多关于它的内容