note001:カンタン計算機?

2013年1月14日

 まずは、HTML5とJavaScriptの関係を探ってみよう。JavaScriptの部分とHTMLに記述するフォームで値を受け渡しする。最初に取り上げるのは、計算が苦手な爺のためのカンタン計算機だ。計算式(文字列)を数式として評価、JavaScriptで計算してウェブページに表示する。



 上の枠内をクリックして数式を入力。使えるのは半角数字と演算子の記号。ボタンを押すと、その計算結果が下の枠内に表示される。テキストエディタなどで書いた計算式をコピー&ペーストすることも可能。注意したいのは、ローカルでは何の問題もないが、ウェブ上で入力された文字列をそのまま「eval(str)」としてしまうと、セキュリティ上問題があるらしい。eval関数は、JavaScriptのすべてのコマンドを評価し、実行してしまうからだ。ま、そんなわけで、ここでは、正規表現を使い、使用できる文字を制限している。


Script:(headタグ内、あるいは、bodyタグ内の先頭に記述)

<script type="text/javascript">	//HTML5ではtype属性の指定は不要
var Decimal = 0;	//変数の受け渡しのためグローバル変数を設定
function setEval(){
	var str = document.myFORM.myValue.value;
	if (str.match("[^\(-9]")) {	//「()*+,-./0123456789」以外の文字使用を制限
		Decimal = 0;
		document.getElementById("result").value = 0;
		alert("半角数字と記号で入力してね!");
	} else {
		if(str==""){str=0;}
		Decimal = eval(str);
		document.getElementById("result").value = Decimal;
	}
	return Decimal;
}
function setToString(n){
	setEval();
	document.getElementById("result").value = Decimal.toString(n);
}
</script>

HTML:(bodyタグの中に記述)

<form name="myFORM">
<input type="text" name="myValue" value="1+2+3*4">
<input type="button" value=" 文字列を数式として計算する!" onclick="setEval()"><br />
<input type="text" id="result" value="0">
<input type="button" value="2 進数 " onclick="setToString(2)">
<input type="button" value="8 進数 " onclick="setToString(8)">
<input type="button" value="16 進数 " onclick="setToString(16)">
</form>