ユーザに入力させた文字列に、予約語が含まれていないかどうかをチェックするには、配列と正規表現を使うのが良さそうです。
にしし ふぁくとりー

にししの Perl/CGI Tips ふぁくとりー

にししふぁくとりーPerl/CGI Tips → このページ

配列関連TIPS

入力文字列が予約語かどうかをチェックするには?

ユーザから入力を受け付ける場面はたくさんありますね。例えば、掲示板での名前入力や、アカウント作成フォームでの希望ID名入力など。 これらの入力場面では、システムが予約している単語を使って欲しくないことがあります。 そういったシステム予約文字が、ユーザの入力内容に含まれているかどうかをチェックするにはどうすれば良いでしょうか?

Perl SOURCE 1

予約語を配列に持っておき、ループで1つずつ調べていくのが簡単でしょう。
foreach $oneword (@reserves) {
   if( $userinput =~ m/$oneword/i ) {
      # 一致したモノがあれば
      print "システム予約文字が含まれています。\n";
      last;
   }
}
配列 @reserves にシステム予約語をすべて格納しておきます。ユーザからの入力文字列は、変数 $userinput に格納します。
これで上記のコードを実行すれば、ユーザからの入力文字列にシステム予約文字が含まれていれば、「システム予約文字が含まれています。」と表示されます。
※上記の場合、大文字・小文字を区別しません。区別させたい場合は、正規表現「m/$oneword/i」末尾の「 i 」を削除します。

Perl SOURCE 2

先の例の場合、システム予約文字と完全一致ではなく「含まれている」だけでも該当します。
完全一致だけを該当させるには、2行目の正規表現部分を次のようにします。
if( $userinput =~ m/^$oneword$/i ) {
正規表現では、「 ^ 」は先頭、「 $ 」は末尾に一致します。
ですから、上記のように「 ^$oneword$ 」と書けば、余分な文字列が含まれている場合は該当せず、予約語と完全に一致した場合のみ該当するようになります。

比較

システム予約語に「 nishishi 」という文字列があった場合...
予約語と「完全一致」する場合だけエラーにしたいのか、予約語が「含まれている」場合すべてをエラーにしたいのかによって、使い分けて下さい。

SAMPLE SOURCE

ソースコード17 , 出力結果17
2004/03/08. Mon.

このページに記載の内容は、必ずしも正しいとは限りません。ご注意下さい。
もっと良い方法がありましたら、ぜひ、教えて頂けるとありがたいです。
製作者にししへのご連絡は、メールなどでお送り下さい。匿名のコメントも送信できます。
どのページへもリンクは歓迎します。複製・転載はご遠慮下さい。