重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

CGI勉強中です。

表の中に文章を表示させるのですが、表の幅が狭い場合、自動改行によりとデザインが崩れてしまうのを防ぐためif文で分岐させています。
-----------------
if ($all_width(表の全幅) >= "xxx") {1行で表示}
else{2行<br>で表示}
--------------------
といった感じです。
でも、この場合、$all_width を%で指示した場合、もちろん100以下なので2行表示してしまいます。
で、もうちょっとカスタマイズして、
-----------------
if ($all_widthに%が使われていたら) {
  if ($%使用時の行指定==1){1行で表示}
else{2行<br>で表示}
  }
else{
if ($all_width >= "xxx") {1行で表示}
else{2行<br>で表示}
}
-----------------
こうしたいのですが…文法的におかしくは無いですよね。
で、この「$all_widthに%が使われていたら」という表現方法がわかりません。
何か良い方法は無いでしょうか?よろしくお願いします。

A 回答 (2件)

No.1さんの回答通り正規表現を使うと良いと思います。



if ( $all_width =~ /\%/ ) {
...

上記は、$all_widthの値に%という文字列がある場合にtrueを返します。
$all_widthに数字と%しか使われない事が前提で、更に%が文字列の最後にある場合の正規表現は以下のような感じになります。

if ( $all_width =~ /\d+\%$/ ) {
...

正規表現は慣れるまでに多少時間がかかるかもしれませんが、
便利なのものなので覚えておくといいと思いますよ。
    • good
    • 0
この回答へのお礼

ありがとうございました。上記方法で無事分岐が出来ました。

お礼日時:2003/04/19 17:02

私もPerl/CGIの勉強中ですが…



正規表現で「%」の有無を拾ってはいかがでしょうか。
あまりきれいなソースではないかもしれませんが…

$_= $all_width;

if (m/\%/){
  if ($%使用時の行指定==1){1行で表示}
else{2行<br>で表示}
  }
else{
if ($all_width >= "xxx") {1行で表示}
else{2行<br>で表示}
}

このような感じにすれば、$all_widthの中の文字列に「%」が含まれているかどうかを正規表現で判定して、含まれている場合には前者の、そうでない場合には後者の処理に分岐すると思います。

見当違いでしたら、ごめんなさい。
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2003/04/19 17:01

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!