• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:入力規則をまとめて定義)

フォームの書式設定に関する質問|入力規則をまとめて定義する方法は?

このQ&Aのポイント
  • cgi/perlを使用してフォームを作成しています。フォームの一部に製品入力欄を設けており、一度の登録申請で10個分の製品が登録可能です。ただし、製品ごとに販売先や販売日などの詳細項目を入力する必要があります。
  • 現在、販売日の書式を「yyyy/mm/dd」で入力しないとエラーが発生するように設定しています。ただし、10個の製品全てに対して同じ書式チェックを記述すると、コードが冗長になります。
  • 製品は最低1つの入力が必須であり、それ以外は任意となっています。入力がある場合にのみ書式チェックを行いたい場合、どのように記述すれば良いでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • Ethersky
  • ベストアンサー率71% (168/235)
回答No.2

別の一例をば。 ところで、日付のチェックを厳格に行うなら先頭と最後も指定してやりましょう。 このままだと、 a2006/02/06b とか 2006/02/060 なんてのも"マッチ"するので書式が違うとはなりません。 そこで、^ で先頭 $ で後方を指定します。 $n = 0; for(1..10){ $i = sprintf("%02d",$_); if($form{'kounyuu_'.$i} ne ""){ $n++; if($form{'kounyuu_'.$i} !~ /^\d{4}\/\d{2}\/\d{2}$/){ &error('販売日の書式が間違っています。'); } } } if(!$n){&error('最低一つ、販売日の入力が必要です。');}

Karin2006Karin
質問者

お礼

Etherskyさん、 ありがとうございます。こんなにも短い記述で同じ指示ができるんですね! 他の必須項目なども直したくなってきました。。(^^; 今回は入力項目が非常に多いのでEtherskyさんの書き方を流用させていただく事にしました。 ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • galluda
  • ベストアンサー率35% (440/1242)
回答No.1

がると申します。 んっと…色々な手法はあるのですが、一例としてって感じで。 # チェック関数 # 第二引数が1なら必須 sub is_sale_date { my ($data, $flg) = @_; unless (defined $flg) { $flg = "0"; } # データが空の場合 if ($data eq "") { # 必須フラグに1がたっていなければ(必須でないなら) if ($flg ne "1") { # 正常終了 return "OK"; } } # データチェック if ($data =~ /[\d\d\d\d]+\/[\d\d]+\/[\d\d]/){ # OKなので正常終了 return "OK" } # 問題があったのでNG終了 return undef; } my $flg = "OK"; unless ( is_sale_date($form{'kounyuu_01'}, "1") ) { $flg = "NG"; } unless ( is_sale_date($form{'kounyuu_02'} ) ) { $flg = "NG"; } unless ( is_sale_date($form{'kounyuu_03'} ) ) { $flg = "NG"; } # 以下続く # 最終チェック if ("NG" eq $flg) { &error('移管日の書式が間違っています。'); }

Karin2006Karin
質問者

お礼

がるさん、 早速のアドバイスありがとうございます。 アドバイス頂いた通りに作成したら上手く作動しました!

すると、全ての回答が全文表示されます。

関連するQ&A