GETデータ、たとえば
http://www.yahoo.co.jp/test.cgi?data1=1237&data2 …
とある場合、$ENV{'QUERY_STRING'}の中のそれぞれの引数値に個別にエラー処理をかける方法を教えてください。順番はdata2が先頭にくるときもあればdata1が先頭にくるときもあります。data以外の文字はだめです。たとえばcode1=となるとエラーになるようにしたい。data1には数字4文字が入ります。data2には大文字の英字が入ります。
組み合わせはdata1=8544だけのときもありますし、
data1=1234&data2=KOのときもあったりばらばらです。
逆の場合もあります。data2=KO&data1=1234というふうに・・・。$ENV{'QUERY_STRING'} を&で分割して@getにいれてから、@getから&で区切られた個々の値を取り出す方法がわかりません。。。
どなたかご教授ねがいます。よろしくお願いいたします。以下のように書いたのですがうまくできません。
sub err_check{
if ( $FORM{'action'} eq "" ) {
local(@get);
if($ENV{'QUERY_STRING'} !~ /data1|data2|data3/) { &err2; }
if (length($ENV{'QUERY_STRING'}) > 30) { &err2; }
(@get)=split(/&/,$ENV{'QUERY_STRING'});
foreach $getname (@get) {
##data1のとき
if ($data1){
if ($getname !~ /^media=[0-9]+[0-9]+[0-9]+[0-9]/) { &err2; }
if (length($data1) > 6) { &err2; }
if (length($data1) < 4) { &err2; }
}
##data2のとき
if($data2){
if ($getname !~ /^data2=[A-Z]+[A-Z]/) { &err2; }
if (length($data2) ne 2) { &err2; }
}
}
}
No.2ベストアンサー
- 回答日時:
こんな感じでしょうか
@get = split( /&/, $ENV{'QUERY_STRING'} );
foreach $_get( @get ) {
( $key, $val ) = split( /=/, $_get );
if( $key eq "data1" ) {
print "data1のチェック処理\n";
if( $val =~ /^[0-9][0-9][0-9][0-9]$/ ) {
print "data1はOK\n";
}
else {
print "data1間違い\n";
}
}
elsif( $key eq "data2" ) {
print "data2のチェック処理\n";
if( $val =~ /^[A-Z][A-Z]$/ ) {
print "data2はOK\n";
}
else {
print "data2間違い\n";
}
}
}
No.1
- 回答日時:
こんなのでいいのでしょうか?
@get = split('&', $ENV{'QUERY_STRING'});
foreach $keyvalue (@get) {
($key, $value) = split('=', $keyvalue);
ここで、$key、$valueの判定と、処理
$data[$key] = $value;
}
これが終わると、%data 連想配列に、getのデータが入っていますので、外で使えます。
後、正規表現ですが、
$key の判定は、/^data[1-3]$/ でいいと思います。
数字4個でしたら、 /^\d{4}$/
4文字以上、6文字以下の大文字の繰り返しでしたら /^[A-Z]{4,6}$/ って、書けます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) If関数に関する質問です。(再掲) 3 2022/10/01 20:51
- Excel(エクセル) エクセル 関数について質問です。 2 2022/10/03 11:14
- その他(プログラミング・Web制作) pandasでまとめてインデックスを削除するにはどうすればいいですか? たとえば、以下のプログラムで 1 2022/07/31 23:09
- Visual Basic(VBA) vbaのループ処理について 6 2022/05/06 15:35
- その他(プログラミング・Web制作) Python - Excel で Webからデータを連続取得したいのですが エラーが出ます 1 2023/07/06 20:08
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- Excel(エクセル) エクセルの数式で教えてください。 2 2022/10/25 17:10
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- Excel(エクセル) ExcelのIF関数 2 2022/04/14 16:11
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Perl の外部モジュールの利用方法
-
ファイルアイコンの左下に緑の□...
-
perlのプログラミング 部分入れ...
-
ペプシコーラとコカ・コーラとD...
-
アルファベットに付いて質問し...
-
#!/usr/bin/perlで書きだしたCG...
-
Perlのエラーについてご教授く...
-
perlのflock関数でロックをかけ...
-
AI sisterとは、偽物の人ですか?
-
perlプログラミング 空白行削除
-
perlでリテラル値はメモリにど...
-
perlで2次元配列をサブルーチ...
-
perlのrequireの動き方について...
-
perlの構文でカンマの意味が分...
-
perlについての質問
-
Blenderについて
-
perl このテキストファイルを簡...
-
Perlでファイルの末尾から指定...
-
秀丸での一括変換について
-
英数文字列のうちの数値を4桁に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テキストファイルで提出とは?
-
openした後、closeしないでプロ...
-
perlをバージョンアップしたら...
-
INDIRECT 横に再度抽出したい
-
Perl の外部モジュールの利用方法
-
Perlで特定文字列から特定文字...
-
Perlのエラーについてご教授く...
-
bashスクリプト
-
Strawberry Perl for Windows ...
-
perlで2次元配列をサブルーチ...
-
TeraPadエディターの操作方法に...
-
アルファベットに付いて質問し...
-
perlのflock関数でロックをかけ...
-
ファイルアイコンの左下に緑の□...
-
perlプログラミング 空白行削除
-
Wallpaper Engineでおすすめの...
-
Perlで時間の計算
-
perlのrequireの動き方について...
-
perlでリテラル値はメモリにど...
-
画像が表示でnull; this.src
おすすめ情報