/**
* マイナス符号付小数点チェックを行います。
* ・パターンマッチ 0~9、"-"、"."
* ・パターンマッチ "-","."のみはNG
* ・マイナス符号の数 0 or 1
* ・小数点の数 0 or 1
* ・整数部の桁数チェック
* ・小数部の桁数チェック
*
* 例)整数部 3, 小数部 2の場合
* -123 --> OK
* 123 --> OK
* 123.45 --> OK
* -123.45 --> OK
* 1.2 --> OK
* - --> NG
* 123- --> NG
* --123 --> NG
* 1234.56 --> NG
* 123.456 --> NG
* . --> NG
* .123 --> NG
* 123. --> NG
* -. --> NG
*
* @param argValue チェック対象文字列
* @param argIntKetasu 整数部の入力可能桁数
* @param argDecimalKetasu 小数部の入力可能桁数
* @return チェックOKの場合はtrue、
* チェックNGの場合はfalse
*/
function isMinusDecimal(argValue, argIntKetasu, argDecimalKetasu)
{
var minusFlg = false;
var decFlg = false;
if (argValue.match(/[^0-9|^\-|^.]/g))
{
// パターンマッチ 0~9,"-","."以外はNG
return false;
}
if (argValue.match(/[^\-|^.]/g))
{
}
else
{
// パターンマッチ "-","."のみはNG
return false;
}
// 小数点の数を取得する
var count = 0;
for (var i = 0; i < argValue.length; i++)
{
if (argValue.charAt(i) == ".")
{
decFlg = true; count++;
}
}
if (2 <= count)
{
// "."が2つ以上入力されている場合はNG
return false;
}
// "-"の入力個数を取得する
count = 0;
for (i = 0; i < argValue.length; i++)
{
if (argValue.charAt(i) == "-")
{
minusFlg = true;
count++;
}
}
if (2 <= count || (count == 1 && argValue.charAt(0) != "-"))
{
// "-"が2つ以上入力されている場合はNG
// "-"が入力されていて、かつ先頭に"-"がない場合はNG
return false;
}
// 小数点以下のチェック
if (decFlg)
{
// 小数点以下の桁数チェック
var idx = argValue.lastIndexOf(".");
var decimalPart = argValue.substring(idx);
// 小数点以下の桁数を取得する
var length = decimalPart.length - 1;
if (length == 0)
{
// 小数点以下の入力がない場合はNG
return false;
}
if (argDecimalKetasu < length)
{
// 小数点以下の桁数がオーバーしている場合はNG
return false;
}
}
// 整数部の桁数チェック
var intPart = "";
length = 0;
if (decFlg)
{
// 小数点が入力された場合
intPart = argValue.substring(0, argValue.indexOf("."));
}
else
{
intPart = argValue;
}
length = intPart.length;
if (minusFlg)
{
// マイナスが入力された場合は-1
length--;
}
if (argIntKetasu < length)
{
// 整数の桁数がオーバーしている場合はNG
return false;
}
return true;
}
以下のコメントは、その投稿者が所有するものでサイト管理者はコメントに関する責任を負いません。