I was tasked with making a code that picks up when a key is pressed and counts the number of characters typed. I decided to use var regex=/[a-zA-Z0-9]/;
, but to my surprise, when I pressed Enter, Shift, Ctrl, or Alt, it would register all of them.
Here is the snippet of code that matters:
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)
}
}
This way I’ll see the character show up twice if picked up by regex, and once if not.
And I have already tried nearly everything on the W3Schools documentation on RegExp
.
Things that I tried: [A-Za-z0-9]
, [^\n]
(also tried with \0
, \n
, \f
, \r
, \t
, \v
), [\w]
, []
(obviously, at least, here, it doesn’t register any keys).
I was wondering how I can exclude the characters that don’t change the context of the text, other than manually typing every single character on its own.
CodePudding user response:
If you want to use a regex to filter out the a-zA-Z0-9 characters then your original almost correct what your looking for is ^[a-zA-Z0-9]$
this regex will only match one character; anything between ^
and $
in a regex means that the pattern must start at the beginning of a string and end at the end of a string. Your original answer failed because [a-zA-Z0-9]
searches the string for all one character long alphanumerical substrings, obviously the string "Enter" still has alphanumerical characters therefore your regex.match will result in a match.
Alse you could consider using regex.test(str)
as it returns a boolean, you can read more about it over at https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/test