チェックは、正規表現でやれば、いろんな言語でいけそうなので、正規表現で、いろんな値をチェックする方法を考える、シリーズ「正規表現でのチェック方法を考える」。
前回までで、整数は片付いたので(カンマ付きについては、あとになります)、今回は、小数について考えてみたいと思います。
なお、このシリーズにおいて、説明文中の¥は、断りがなければ、半角の円マーク(ないしは、バックスラッシュ)に変えてください(入力が面倒なので全角にしています)
■小数について
小数について考える場合、小数点の前と小数点のあとについて、分けて考えます。
なお、小数点がないのは、いままでやってきた、整数になります。
小数点のまえは、いままでどおり、01とかいけないので、それを除いた、
(0|-?[1-9]¥d*)
となります。。。と、言いたいところですが、
-0.1
はありえますので、今回は、0にも符号がつきます。
そこで、
-?(0|[1-9]¥d*)
一方、小数点の後は、12.などと、小数点があって、数字がないのはふつう認められないので、
かならず1個以上は数字が来ることとします。
ただし、12.0とか、12.010のように、最後が0で終わることはあるので
(12.01を切り捨てた場合、12.0とかき、12としないことも多い。有効範囲を明示したいため)
¥d+
とします。
結果として
-?(0|[1-9]¥d*)¥.¥d+
となります(.だけだと、任意の1文字になってしまうので、¥.)。今までの整数とまとめると、
/^(¥¥|¥$)?(0|-?[1-9]¥d*|-?(0|[1-9]¥d*)¥.¥d+)$/
なかんじ。。赤字が、今回の追加部分。
■ソース
いままでの整数とあわせて、こんなかんじ。
<HTML> <HEAD> <TITLE>JavaScriptテスト広場</TITLE> <SCRIPT LANGUAGE="JavaScript"> <!-- function load() { } function mycheck(val) { if (val.search(/^(¥¥|¥$)?(0|-?[1-9]¥d*|-?(0|[1-9]¥d*)¥.¥d+)$/) != -1 ) { } else { alert("エラー"); } } --> </SCRIPT> </HEAD> <BODY onload="load()"> <FORM NAME="buf"> <INPUT NAME="Text1" TYPE="hidden"> </FORM> <FORM NAME="zikko"> <INPUT NAME="text1" TYPE="TEXT"> <INPUT NAME="button1" TYPE="BUTTON" VALUE="実行" onclick=mycheck(text1.value)> </FORM> </BODY> </HTML> |
今回はここまで。