• 締切済み

PerlでIDチェック

ID、パスワードチェック用CGIを作成しました。 正しいID、パスワードを入力すると任意のフォルダへ移動できると言うものです。 ID、パスワードはCGI内で変更することが出来ます。 そのIDに「_」(アンダーバー)を使ったのですが、うまく合致させることが出来ず必ずIDが違いますと出てしまいます。 どうすれば正しく認識してくれるでしょうか? よろしくお願いします。

みんなの回答

  • wolv
  • ベストアンサー率37% (376/1001)
回答No.3

#さっきの回答で、解決策を示すの忘れてました^^;  [^a-zA-Z0-9+] を、  [^a-zA-Z0-9+_] にすれば、「_」もIDの一部に使える文字になります。

jun2249
質問者

お礼

ありがとうございます。 うまくいきました!!

  • wolv
  • ベストアンサー率37% (376/1001)
回答No.2

私はperlは素人ですが、 「_」が含まれる場合は if($in{in_idno} =~ /[^a-zA-Z0-9+]/){ $ngcnt++; $ngdata .= " ID"; } このif文の条件が満たされるので、エラーになるように思います。

noname#25358
noname#25358
回答No.1

 実際に比較を行っている if 文と、その周辺を記述してください。  それによります。

jun2249
質問者

補足

ありがとうございます。 CGIのソースです。 #---パスワード入力チェック---------------------------------- sub input_check{ $ngcnt = 0; if(!$in{in_idno}){ $ngcnt++; $ngdata .= " ID"; }else{ if($in{in_idno} =~ /[^a-zA-Z0-9+]/){ $ngcnt++; $ngdata .= " ID"; } } if(!$in{in_pass}){ $ngcnt++; $ngdata .= " パスワード"; }else{ if($in{in_pass} =~ /[^a-zA-Z0-9]/){ $ngcnt++; $ngdata .= " パスワード"; } } if($ngcnt > 0){ &re_input($ngdata); }else{ $ngflg = &ip_compare; if($ngflg == 1){ $ngdata = " ID"; &re_input($ngdata); }elsif($ngflg == 2){ $ngdata = " パスワード"; &re_input($ngdata); }else{ print "Location: $page_location\n\n"; #移動先ページ表示 } } } #---登録データと入力データの照合---------------------------------- sub ip_compare{ if($in{in_idno} ne $id_data){ return 1; } if($in{in_pass} ne $pws_data){ return 2; } return 0; }

関連するQ&A

専門家に質問してみよう