- ベストアンサー
全角、半角の区別をする。
年齢を入力した際に、現在の設定であればアルファベットやひらがなを入力したとしてもそのままcsvにおちてしまいますが、半角数字に限定し完了できるようにするにはどうすればよろしいのでしょうか?また、半角英数にした際も教えていただければ幸いです。 #! /usr/bin/perl require "./mimew.pl"; require "./cgi-lib.pl"; &ReadParse(); # form.htmlより受取ったデータを変数に代入 $d[0]=$in{'name'}; $d[1]=$in{'sex'}; $d[2]=$in{'age'}; # 未入力チェック if($d[0] eq ""){$error[0]="お名前を入力して下さい";} if($d[1] eq ""){$error[1]="性別を入力して下さい";} if($d[2] eq ""){$error[2]="年齢を入力して下さい";} #エラーメッセージを全部つないで $error=$error[0].$error[1].$error[2]; # エラーが無いときの処理 if($error eq ""){ # データをカンマ区切りにしてdata.csvに保存 $data=join(",",$d[0],$d[1],$d[2])."\n"; open(FH,">>./data.csv"); print FH $data; close FH;
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>わたしがあまりCGIを詳しくなくというかほとんど素人で設置くらいしかできなくこの記述もほとんどつくっていただいたようなもので…。 その作ってもらった人に今回も頼むのがいいでしょうね。 素人がいじるには難しい >ですので、不明な点がアウト時の処理となっている箇所は具体的にどのように記述すればよろしいのでしょうか? 未記入時にしている処理のような事をする。 >また、if~の記述はどの場所へ記述する必要がありますか?ご回答よろしくお願いいたします。 好きなところに まぁチェックルーチンはまとめた方が後々も楽だろうし 未記入チェックの処理の後でしょうね。 あと今回の場合、半角チェックを入れずに 全角を半角に自動で変換するプログラムに するのも手ですね。 Jcode.pmまたはjcode.plを用いて 後は年齢の部分を選択リストで選択する形にするとか 十の桁と一の桁を別々にして
その他の回答 (1)
- Ethersky
- ベストアンサー率71% (168/235)
変数$valueに値が入っているとする 例1 数字限定(半角数字以外が含まれていたらアウトとすれば) if($value =~ /[^0-9]/){アウト時の処理} 例2 上記と同じ意味(\d は 0-9 と同義) if($value =~ /[^\d]/){アウト時の処理} 例3 上記と同じ意味(\D は [^0-9] と同義) if($value =~ /\D/){アウト時の処理} 例4 数字限定(半角数字だけで構成されていなければアウトとすれば) if($value !~ /^\d+$/){アウト時の処理} 例5 半角英数限定(半角英数以外が含まれていたらアウトとすれば) if($value =~ /[^A-Za-z0-9]/){アウト時の処理} 例6 上記と同じ意味 ※アンダーバー(_)も含む(\w は [A-Za-z0-9_] と同義) if($value =~ /[^\w]/){アウト時の処理} 例7 上記と同じ意味 ※アンダーバー(_)も含む(\W は [^A-Za-z0-9_] と同義) if($value =~ /\W/){アウト時の処理} ところで、せっかく配列に入れているなら join(",",$d[0],$d[1],$d[2]) ではなく join(",",@d) の方がスマートです。 また、変数$dataを再利用しないなら print FH $data; ではなく print FH join(",",$d[0],$d[1],$d[2])."\n"; も可能。
補足
早々にご回答ありがとうございます。具体的に説明いただいているのですが、わたしがあまりCGIを詳しくなくというかほとんど素人で設置くらいしかできなくこの記述もほとんどつくっていただいたようなもので…。ですので、不明な点がアウト時の処理となっている箇所は具体的にどのように記述すればよろしいのでしょうか?また、if~の記述はどの場所へ記述する必要がありますか?ご回答よろしくお願いいたします。
お礼
ご連絡が遅くなりましたが、確かに素人には難しそうです。選択形式を変更することで解決しようと思います。どうもありがとうございました。