質問: 入力文字の制限を行いたいと考えております。 教えていただきたいことは以下の2点です。 1半角カタカナ+改行のみ入力可 半角カタカナ+改行のみ入力可、としたいのですが、 改行するとエラーメッセージを出力してしまいます。 また、なぜか"11111a"はエラーになるのに対し、 "a11111"のように1文字目に半角英字が入った場合は、 エラーメッセージを出力せず、英字が入力できてしまいます。 現状の実装は上記の通りです。 ``` if (!取得した文字列.match(/[ヲ-゚ -]+$/)) { エラーメッセージの出力 } ``` 【半角カタカナ+改行のみ入力可】+【先頭文字のチェックも含む】 とする方法を教えていただきたいです。 ちなみに、改行コード=¥n(半角)ということだったので、 .match(/[ヲ-゚ -¥n]+$/)も試してみましたが 改行できませんでした。 ーーー 2半角数字と一部記号(-,+)のみ入力可 半角数字と一部記号(-,+)のみ入力可、としたいのですが、 1と同様に、"a11111"のように1文字目に半角英字が入った場合は、 エラーメッセージを出力せず、英字が入力できてしまいます。 現状の実装は上記の通りです。 ``` if (!取得した文字列.match(/[0-9+-]+$/)) { エラーメッセージの出力 } ``` 【半角数字と一部記号(-,+)のみ入力可】+【先頭文字のチェックも含む】 とする方法を教えていただきたいです。 ーーー 以上となります。宜しくお願い致します。
回答: 1半角カタカナ+改行のみ入力可 ``` 文字列.match(/^[ヲ-゚\n]+$/) ``` 2半角数字と一部記号(-,+)のみ入力可 ``` 文字列.match(/^[0-9\+\-]+$/) ``` 正規表現(`/`~`/`) の先頭にある`^`によって、 **行頭から**にされるので、先頭の文字までちゃんと検索されます。 (元のソースでは、**行頭からにならない**ので、最初の文字は無視されてしまっています。) (`$`は逆に**行末まで**という意味です。) つまり、 文字列のすべてを検索したければ * 正規表現の先頭に `^` * 正規表現の末尾に `$` をつけましょう。