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

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

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

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

4139閲覧

JavaScriptで四則演算

Hyonta

総合スコア36

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

2クリップ

投稿2017/02/15 10:30

編集2017/02/15 11:49

index.htmlにアクセスがあったら、JavaScriptでURLから演算式を取り出して計算結果を表示するようにしたいです。
今、以下のような状態なのですがアドバイスをお願い致します。

html

1<!DOCTYPE html> 2<html> 3<head></head> 4<body> 5<script type="text/javascript"> 6//演算式を取得 7var equation =location.search.substring(1); 8//演算式になっていれば計算する 9if( equation.match(/+|-|\*|\/|(|)/){ 10document.write( equation ); 11} else { 12document.write("ERROR"); 13} 14</script> 15</body> 16</html>

以下のようにアクセスがあります。
curl 'http://example.co.jp/calc?abc'
ERROR
curl 'http://example.co.jp/calc?1+1'
2
curl 'http://example.co.jp/calc?1+2*3'
7
curl 'http://example.co.jp/calc?(1+2)*3'
9

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

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

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

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

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

kei344

2017/02/15 11:12

質問文のコードはそれぞれコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。また、例示用ドメインはご自身で所有されていない限り example.com, example.jp, example.co.jp など例示用に予約されたドメイン名を利用してください。 http://www.atmarkit.co.jp/fwin2k/win2ktips/801exampledom/exampledom.html
guest

回答1

0

ベストアンサー

計算するだけならeval関数でできるような気がします。
ただし、eval関数は入力された式を計算してくれるだけの関数ではなく、引数に渡した値をjavascriptとして実行してしまいます。そのため、うっかり意図しないjavascriptのコードを実行させてしまうようなことが発生し、大変危険なので、使用するときは入力された値が正しい値か厳密に調べなくてはなりません。
もし、ライブラリを導入できない環境でないかぎり**math.jsなどの計算ライブラリを利用することをおすすめします。**

HTML

1<!DOCTYPE html> 2<html> 3<head> 4 <meta charset="utf-8"> 5 <title>タイトル</title> 6</head> 7<body> 8<script type="text/javascript"> 9 try { 10 //演算式を取得 11 var equation = location.search.substring(1); 12 //演算式になっていれば計算する 13 if (Number.isFinite(eval(equation))) { 14 alert(eval(equation)); 15 } 16 } catch (e) { 17 alert("ERROR"); 18 } 19</script> 20</body> 21</html>

投稿2017/02/15 11:20

編集2017/02/15 11:23
s8_chu

総合スコア14731

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

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

hikochang

2017/02/15 13:31

正規表現で [0-9¥(¥)¥+¥-¥*¥/]+ などでチェックしてからであれば意図しないコードの実行は防げますかね?
Hyonta

2017/02/15 14:03

ありがとうございます!! 無事計算できました。 が、画面でみると計算結果が表示されるのですが、 teratermで curl 'http://example.co.jp/calc?1+1' のように打つと、ソースコードがそのまま表示されてしまいます。 原因わかりますでしょうか。。。
kei344

2017/02/15 14:08

To: Hyontaさん JavaScriptはブラウザ上で動作するので、curl 出の取得時には動きません。
Hyonta

2017/02/15 14:13

そういうことですか!!! curlでも計算結果が見たい場合にはJavaScriptを使えないんですか! 根本からやり直しになりそうです。。。
s8_chu

2017/02/15 15:04 編集

返信が遅れてしまいすみません。 hikochangさん> 入力値のチェックを正規表現で適切に行うことができるのならば意図しないコードの実行は防げると思います。これは個人的な意見になりますが、正規表現で複雑なことをやろうとすると途中で対応しきれなくなってしまったり、万が一誤りがあったとしても発見することが難しいので、もしも他に方法があるならばそれを使うようにしています。 Hyontaさん> kei344さんのコメントの通り、通常curlではソースコードがターミナルに出力されるようになっていて、javascript実行後のHTMLを取得することはできないのではないかと思います。 kei344さん> 私の代わりに返信していただきありがとうございます。
Hyonta

2017/02/15 15:03

回答ありがとうございます。 curlでも計算結果を確認したい場合、どのような方法があるでしょうか。 教えて頂けると幸いです(>_<)
think49

2017/02/15 15:08

curlはサーバからresponse bodyをgetするだけなのでサーバで出力された時点で処理が完了している必要があります。 当該サーバのサーバサイドスクリプトで四則演算してHTML出力すれば目的を達成できると思います。
hikochang

2017/02/15 16:07

s8_chuさん、回答どうもです。 think49さん、gasなどのサーバーサイドだとcurlでも行けますよね?Hyontaさんの望んでいる回答ではないと思いますが、、、
Hyonta

2017/02/16 09:52

みなさんありがとうございます。 JacaScriptではないので、別質問にて質問させていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問