フォームから入力された値が要求にあったものかを判定する関数。
2007/09/09
フォームから入力された値の型と範囲を判別するために作った関数です。主に自分がJavaScriptでの計算時にユーザーが入力した値を検閲するため。
数値としての"0"とブーリアン変数としての"0"の区分にかなり無理矢理な方法を使ってしまっているので、汚いかもしれません。
2007/09/09
isNumber関数の変数は最大で4つ、最小で1つです。引数の形式はisNumber( str,isInt,max,min )です。
strは必須で、判定する数値を代入します、文字列でも構いません。str単体だと単なる逆isNaNとして動作します。
isIntをtrueにすると入力された値が整数値であるかを判定するようになります。
maxに数値を代入すると入力された値の上限値を判定するようになります。ちなみに浮動小数値で上限を指定する場合、isIntをfalseにした上でmaxを代入します。
minに数値を代入すると入力された値の下限値を判定するようになります。ちなみに上限を指定せず下限値だけを指定したい場合、maxをfalseにした上でminを代入します。
引数の最小はstrのみで、このとき関数はisNumber( str )となりますが、引数を省略せずに記述した場合、isNumber( str,false,false,false )となります。
function isNumber( _str,isInt,max,min )
{
var str,num;
str = String(_str);
if( isNaN( str ) )return false;
num = eval( str );
if( isInt==null )return true;
else if( isInt )if( num!=parseInt(num) )return false;
if( max==null )return true;
max = String(max).toLowerCase();
if( max!="false" || max=="0" )if( num>eval(max) )return false;
if( min==null )return true;
min = String(min).toLowerCase();
if( min!="false" || min=="0" )if( num<eval(min) )return false;
return true;
}
2010/08/13
isNumber関数を一度に多数の入力値に対して判定できるようにした強化関数。サイトでフォームからの入力値を整理する実用用途を目的として作ってみた。汎用的に使えるのかどうかは分からないので参考程度に。
isNumberFormはルール配列、数値配列の2つの引数を持つ。ルール配列はisNumber関数の3つの判定条件を3つの配列要素として一まとめにしたものを複数配列にまとめたもの。数値配列はルール配列の判定ルールに対応する入力値の組を複数の配列にまとめたものになっている。戻り値は、正常に判定をパスすればfalse、パスしなければ判定に引っかかった不正な入力の値を返す。
動作にはisNumber関数も併せて必要。
function isNumberForm(rla,dla)
{
var i,j;
for(i=0; i<dla.length; i++)
for(j=0; j<dla[i].length; j++)
if(!isNumber(dla[i][j],rla[i][0],rla[i][1],rla[i][2]))return dla[i][j];
return false;
}
文章だけではわかりづらいので動作させたサンプルコードも記載。
function icTest( F )
{
var rl = new Array();
rl[0] = [true,9,0];
rl[1] = [true,false,0];
rl[2] = [false,false,false];
var dl = new Array();
dl[0] = [F.Num1.value,F.Num2.value,F.Num3.value,F.Num4.value];
dl[1] = [F.Num5.value];
dl[2] = [F.Num6.value];
var testout = isNumberForm(rl,dl);
if(testout==false)alert("判定をパス。");
else alert("入力された数値は不正です。\ninput:"+testout);
}