質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

1回答

1639閲覧

Ruby cgiでの正規表現

Feather1226

総合スコア7

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

0クリップ

投稿2017/12/26 08:50

###前提・実現したいこと
Rubyもといプログラミングを勉強しはじめたものです。
初めて利用させていただきます。よろしくお願いいたします。

http://IP/cgi-bin/calc.rb?1+1
のように引数に計算式を渡して、計算結果の2を表示する単純なRuby-CGIを作成しました。
引数に数字と四則演算子(+-*/)以外が含まれていた場合にエラーメッセージを表示させたいです。

QUERY_STRINGで引数を取得しており、それをマッチングさせればよいのかなと考えたのですがうまくいきません。
ご教示いただければと思います。よろしくお願いいたします。

・環境
AWS EC2
ruby 2.0.0p648
Apache/2.2.34

###該当のソースコード
このコードで計算結果は表示できるようになりました。

ruby

1#!/usr/bin/ruby 2print "Content-type: text/html\n\n" 3 4puts eval ENV['QUERY_STRING']

###試したこと
正規表現の使い方もおぼつかないのですが…。以下のような記述を考えましたが500Internal Server Errorになってしまいます。パーミッションは755です。

ruby

1#!/usr/bin/ruby 2print "Content-type: text/html\n\n" 3 4if /[+-*/]\d/ =~ ENV['QUERY_STRING'] 5 puts eval ENV['QUERY_STRING'] 6else 7 puts "ERROR" 8end

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

rb

1print "Content-type: text/html\n\n" 2 3if /[^-+*/\d()]/ =~ ENV['QUERY_STRING'] 4 puts "ERROR" 5else 6 puts eval ENV['QUERY_STRING'] 7end
  • 正規表現リテラル内で/を使う時はエスケープしないと駄目
  • -を[]内で使う時はエスケープするなり順番考えるなり
  • 元の正規表現だと、おそらく意図通りにはならない
  • 全てが四則演算記号or数字 == 四則演算記号・数字以外を含まない
  • 演算順序の指定のために()必要な気もする

投稿2017/12/26 10:46

asm

総合スコア15147

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Feather1226

2017/12/26 11:25

asmさん 回答いただきありがとうございます。 正規表現の書き方について大変参考になりました。 除算記号については質問する前から少し気にかかっていたのですがエスケープが必要なんですね。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問