@TaikiTkwkbysh (WAKA Engineer)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

【Javascript】event.keyで、shiftやcommandキーの入力に反応しないようにしたい

解決したいこと

Javascript(Typescript)を学習中です。
現在キーボード入力を使った簡単なゲームを作成中なのですが、そこで
文字と数字以外のキーボード入力に反応しないようにしたいです。

現状ソースは以下のような正規表現を使用しています。

 if(e.key.match(/[A-Z]/i)){
  // some code.
}

数値も入力の対象にはしたくないのでこの正規表現を使用しております。
数値入力はこの正規表現ではじく事ができていますが、shift、space、Enter等ははじけず通過してしまいます。

これらはそれぞれ、
e.altKeye.ctrlKeye.shiftKeyでそれぞれのキーボード入力に対してif文をかけていくしかないのでしょうか。

ご教示のほど、宜しくお願い致します。

0 likes

2Answer

このドキュメントを読んでください。

KeyboardEvent.key - Web API | MDN

ページ中ほどに実際にテストしてみることできるツールもあります。

たとえばEnterキーが押されたときはkeyEnterという文字列になるので/[A-Z]/iにマッチしてしまっているのだと思います。
なのでパターンを/^[A-Z]$/iにすれば良いのではないでしょうか。

余談になりますが、ある文字列が正規表現に一致するかどうかを知りたいだけなら、matchではなくtestのほうが素直かなと思います。
String.prototype.match() - JavaScript | MDN

1Like

Comments

  1. @TaikiTkwkbysh

    Questioner

    @itagagaki様
    この度はお忙しい中ご教示を頂き、誠にありがとうございます。

    正規表現が間違っていたのですね。

    >>matchではなくtestのほうが素直かなと思います。

    承知致しました。
    matchメソッドの場合、指定した文字列がない場合nullを返すのですね。
    matchメソッドの挙動をあまり理解しておりませんでした。

    testメソッドの方が確かに自然かなと思いましたので、testに変更致します。

    この度はご教示頂き、ありがとうございました。
    また機会がございましたら、ご教示の程宜しくお願い致します。

@TaikiTkwkbysh さん
今後同じことが発生した時の為に、consoleデバッグやbreakpointを使って、Ctrlキー入力時の event.key 値を確認するように習慣化してください。


Ctrlキーを入力したとき、event.key には "Control" が入ります。

if(e.key.match(/[A-Z]/i)){
 // some code.
}

"Control" には [A-Z]含まれている(部分一致) ので、上記コードではマッチした扱いになります。
正規表現で完全一致を実現するには、^$ で括ります。

if (/^[a-z]$/i.test(event.key)) {
  console.log('[a-z] のキーが入力されました');
}
1Like

Comments

  1. @TaikiTkwkbysh

    Questioner

    @think49様
    この度はお忙しい中ご教示頂き、誠にありがとうございます。

    内容承知致しました。
    正規表現が間違っていたのですね。


    >>今後同じことが発生した時の為に、consoleデバッグやbreakpointを使って、Ctrlキー入力時の event.key 値を確認するように習慣化してください。

    承知致しました。
    一度確認をする前に自身で現象を確認する癖づけを行います!

    この度はご教示頂きありがとうございました。
    また機会がございましたらご教示の程、宜しくお願い致します。

Your answer might help someone💌