//====================================================================
// 各種文字列チェック スクリプト
//====================================================================
var cstr_hankakukana = "ｱｲｳｴｵｶｷｸｹｺｻｼｽｾｿﾀﾁﾂﾃﾄﾅﾆﾇﾈﾉﾊﾋﾌﾍﾎﾏﾐﾑﾒﾓﾔﾕﾖﾗﾘﾙﾚﾛﾜｦﾝｧｨｩｪｫｯｬｭｮｰﾞﾟ､｡｢｣";

/*
'------------------------------------------------------------------------------
' 関数名	:IsRealFormat
' 機能		:指定文字列が実数フォーマットとして成立するかチェックします
' 返り値	:true:正常 false:不良
' 引き数	:val - (入)指定文字列
' 機能説明:なし
' 備考		:なし
*/
function IsRealFormat(val) {
	var rval, cval;

	if (val.length == 0) { return true; }
	if (val.search("[^-0-9\.]") != -1) { return false; }
	if (isNaN(val)) { return false; }
//	if (val == 0 && val.length != 1) { return false; }
	if (val < 0) { val = val.substring(1); }
	if (val.indexOf(".", 0) == -1) {
		if (val.length > 1) {
			rval = val.match("[1-9][0-9]*");
		} else {
			rval = val.match("[0-9]");
		}
	} else {
		cval = val.substr(0, val.indexOf(".", 0));
		if (cval.length > 1) {
			rval = val.match("[1-9][0-9]*\.[0-9]*");
		} else {
			rval = val.match("[0-9]\.[0-9]*");
		}
	}
	if (rval == null) { return false; }
	if (rval.length > 1) { return false; }
	if (rval[0].length != val.length) { return false; }
	return true;
}
/*
'------------------------------------------------------------------------------
' 関数名	:IsRealFormatWithFigure
' 機能		:指定文字列が実数フォーマットとして成立するかチェックします
' 返り値	:true:正常 false:不良
' 引き数	:val - (入)指定文字列
' 				 figcnt - (入)整数部桁数(0:チェックしない)
' 				 deccnt - (入)小数部桁数(0:チェックしない)
' 機能説明:桁数チェック付き
' 備考		:なし
*/
function IsRealFormatWithFigure(val, figcnt, deccnt) {
	var rval, exp, cval;

	if (!IsRealFormat(val)) { return false; }
	if (val < 0) { val = val.substring(1); }
	if (val.indexOf(".", 0) == -1) {
		//小数点なし
		if (figcnt > 0) {
			if (!IsIntegralFormatWithFigure(val, figcnt)) { return false; }
		}
	} else {
		//小数点あり
		if (figcnt > 0) {
			cval = val.substr(0, val.indexOf(".", 0));
			if (!IsIntegralFormatWithFigure(cval, figcnt)) { return false; }
		}
		if (deccnt > 0) {
			cval = val.substr(val.indexOf(".", 0) + 1);
			if (cval.length > deccnt) { return false; }
		}
	}
	return true;
}
/*
'------------------------------------------------------------------------------
' 関数名	:IsMinusRealFormat
' 機能		:指定文字列が負の実数フォーマットとして成立するかチェックします
' 返り値	:true:正常 false:不良
' 引き数	:val - (入)指定文字列
' 機能説明:なし
' 備考		:なし
*/
function IsMinusRealFormat(val) {
	if (!IsRealFormat(val)) { return false; }
	if (val > 0) { return false; }
	return true;
}
/*
'------------------------------------------------------------------------------
' 関数名	:IsPlusRealFormat
' 機能		:指定文字列が正の実数フォーマットとして成立するかチェックします
' 返り値	:true:正常 false:不良
' 引き数	:val - (入)指定文字列
' 機能説明:なし
' 備考		:なし
*/
function IsPlusRealFormat(val) {
	if (!IsRealFormat(val)) { return false; }
	if (val < 0) { return false; }
	return true;
}
/*
'------------------------------------------------------------------------------
' 関数名	:IsIntegralFormat
' 機能		:指定文字列が整数フォーマットとして成立するかチェックします
' 返り値	:true:正常 false:不良
' 引き数	:val - (入)指定文字列
' 機能説明:なし
' 備考		:なし
*/
function IsIntegralFormat(val) {
	if (val.length == 0) { return true; }
	if (val.search("[^-0-9]") != -1) { return false; }
	if (isNaN(val)) { return false; }
	if (val == 0 && val.length != 1) { return false; }
	if (val < 0) { val = val.substring(1); }
	if (val.length > 1) {
		rval = val.match("[1-9][0-9]*");
		if (rval == null) { return false; }
		if (rval.length > 1) { return false; }
		if (rval[0].length != val.length) { return false; }
	}
	return true;
}
/*
'------------------------------------------------------------------------------
' 関数名	:IsIntegralFormatWithFigure
' 機能		:指定文字列が整数フォーマットとして成立するかチェックします
' 返り値	:true:正常 false:不良
' 引き数	:val - (入)指定文字列
' 				 figcnt - (入)整数部桁数(0:チェックしない)
' 機能説明:桁数チェック付き
' 備考		:なし
*/
function IsIntegralFormatWithFigure(val, figcnt) {
	var rval, exp;

	if (!IsIntegralFormat(val)) { return false; }
	if (val.length > figcnt) { return false; }
	if (figcnt > 2 && val.length > 2) {
		figcnt--;
		exp = "-?[1-9][0-9]{0," + figcnt + "}";
		rval = val.match(exp);
		if (rval == null) { return false; }
		if (rval.length > 1) { return false; }
		if (rval[0].length != val.length) { return false; }
	}
	return true;
}
/*
'------------------------------------------------------------------------------
' 関数名	:IsMinusIntegralFormat
' 機能		:指定文字列が負の整数フォーマットとして成立するかチェックします
' 返り値	:true:正常 false:不良
' 引き数	:val - (入)指定文字列
' 機能説明:なし
' 備考		:なし
*/
function IsMinusIntegralFormat(val) {
	if (!IsIntegralFormat(val)) { return false; }
	if (val > 0) { return false; }
	return true;
}
/*
'------------------------------------------------------------------------------
' 関数名	:IsPlusIntegralFormat
' 機能		:指定文字列が正の整数フォーマットとして成立するかチェックします
' 返り値	:true:正常 false:不良
' 引き数	:val - (入)指定文字列
' 機能説明:なし
' 備考		:なし
*/
function IsPlusIntegralFormat(val) {
	if (!IsIntegralFormat(val)) { return false; }
	if (val < 0) { return false; }
	return true;
}
/*
'------------------------------------------------------------------------------
' 関数名	:IsBetweenSpaceExist
' 機能		:指定文字列内部の空白の有無をチェックします
' 返り値	:true:あり false:なし
' 引き数	:val - (入)指定文字列
' 機能説明:なし
' 備考		:なし
*/
function IsBetweenSpaceExist(val) {
	if (val.length == 0) { return false; }
	return (val.search(/[^\s]+\s+[^\s]+/) != -1);
}
/*
'------------------------------------------------------------------------------
' 関数名	:IsZipFormat
' 機能		:指定文字列が郵便番号フォーマットとして成立するかチェックします
' 返り値	:true:正常 false:不良
' 引き数	:val - (入)指定文字列(xxx-xxxx or xxx-xx or xxx)
' 機能説明:なし
' 備考		:なし
*/
function IsZipFormat(val) {
	var rval;

	if (val.length == 0) { return true; }
	rval = val.match("[0-9]{3}-[0-9]{4}|[0-9]{3}-[0-9]{2}|[0-9]{3}");
	if (rval == null) { return false; }
	if (rval.length > 1) { return false; }
	return (rval[0].length == val.length);
}
/*
'------------------------------------------------------------------------------
' 関数名	:IsPhoneFormat
' 機能		:指定文字列が電話番号フォーマットとして成立するかチェックします
' 返り値	:true:正常 false:不良
' 引き数	:val - (入)指定文字列
' 				 mode - (入)市外局番無しを許可する場合 true それ以外false
' 機能説明:なし
' 備考		:なし
*/
function IsPhoneFormat(val, mode) {
	var rval;

	if (val.length == 0) { return true; }
	if (mode) {
		rval = val.match("[0-9]{2,5}-[0-9]{1,4}-[0-9]{4}|[0-9]{1,4}-[0-9]{4}");
	} else {
		rval = val.match("[0-9]{2,5}-[0-9]{1,4}-[0-9]{4}");
	}
	if (rval == null) { return false; }
	if (rval.length > 1) { return false; }
	return (rval[0].length == val.length);
}
/*
'------------------------------------------------------------------------------
' 関数名	:IsHandyPhoneFormat
' 機能		:指定文字列が携帯電話番号フォーマットとして成立するかチェックします
' 返り値	:true:正常 false:不良
' 引き数	:val - (入)指定文字列
' 機能説明:なし
' 備考		:なし
*/
function IsHandyPhoneFormat(val) {
	var rval;

	if (val.length == 0) { return true; }
	rval = val.match("[0-9]{3}-[0-9]{4}-[0-9]{4}");
	if (rval == null) { return false; }
	if (rval.length > 1) { return false; }
	return (rval[0].length == val.length);
}
/*
'------------------------------------------------------------------------------
' 関数名	:IsMailAddressFormat
' 機能		:指定文字列がメイルアドレスフォーマットとして成立するかチェックします
' 返り値	:true:正常 false:不良
' 引き数	:val - (入)指定文字列
' 機能説明:なし
' 備考		:なし
*/
function IsMailAddressFormat(val) {
	var rval;

	if (val.length == 0) { return true; }
	rval = val.match("[0-9a-zA-Z]+@[0-9a-zA-Z]+\.\S+[0-9a-zA-Z]+");
	if (rval == null) { return false; }
	if (rval.length > 1) { return false; }
	return (rval[0].length == val.length);
}
/*
'------------------------------------------------------------------------------
' 関数名	:IsURLFormat
' 機能		:指定文字列がＵＲＬフォーマットとして成立するかチェックします
' 返り値	:true:正常 false:不良
' 引き数	:val - (入)指定文字列
' 機能説明:なし
' 備考		:なし
*/
function IsURLFormat(val) {
	var rval;

	if (val.length == 0) { return true; }
	rval = val.match("http:\/\/.+");
	if (rval == null) { return false; }
	if (rval.length > 1) { return false; }
	return (rval[0].length == val.length);
}
/*
'------------------------------------------------------------------------------
' 関数名	:IsMonthFormat
' 機能		:指定文字列が月フォーマットとして成立するかチェックします
' 返り値	:true:正常 false:不良
' 引き数	:val - (入)指定文字列(mm)
' 機能説明:なし
' 備考		:上位桁の０を許す
*/
function IsMonthFormat(val) {
	var rval, exp;

	if (val.length == 0) { return true; }
	if (val.length > 2) { return false; }
	exp = "[0-9]{1,2}";
	rval = val.match(exp);
	if (rval == null) { return false; }
	if (rval.length > 1) { return false; }
	if (rval[0].length != val.length) { return false; }
	if (val >= 1 && val <= 12) { return true; }
	return false;
}
/*
'------------------------------------------------------------------------------
' 関数名	:IsDayFormat
' 機能		:指定文字列が日フォーマットとして成立するかチェックします
' 返り値	:true:正常 false:不良
' 引き数	:val - (入)指定文字列(dd)
' 機能説明:なし
' 備考		:上位桁の０を許す
*/
function IsDayFormat(val) {
	var rval, exp;

	if (val.length == 0) { return true; }
	if (val.length > 2) { return false; }
	exp = "[0-9]{1,2}";
	rval = val.match(exp);
	if (rval == null) { return false; }
	if (rval.length > 1) { return false; }
	if (rval[0].length != val.length) { return false; }
	if (val >= 1 && val <= 31) { return true; }
	return false;
}
/*
'------------------------------------------------------------------------------
' 関数名	:IsMonthDayFormat
' 機能		:指定文字列が月日フォーマットとして成立するかチェックします
' 返り値	:true:正常 false:不良
' 引き数	:val - (入)指定文字列(mmdd)
' 機能説明:なし
' 備考		:なし
*/
function IsMonthDayFormat(val) {
	var mm, dd;

	if (val.length == 0) { return true; }
	if (val.length != 4) { return false; }
	mm = val.substr(0, 2);
	dd = val.substr(2, 2);
	if (IsMonthFormat(mm)) {
		if (IsDayFormat(dd)) { return true; }
	}
	return false;
}
/*
'------------------------------------------------------------------------------
' 関数名	:IsJapaneseDateFormat
' 機能		:指定文字列が和暦日付フォーマットとして成立するかチェックします
' 返り値	:true:正常 false:不良
' 引き数	:val - (入)指定文字列(yymmdd or Xyymmdd)
' 				 mode - (入)存在チェック(true:する false:しない)
' 機能説明:なし
' 備考		:なし
*/
function IsJapaneseDateFormat(val, mode) {
	var yy, mm, dd, dt, ptn;

	if (val.length == 0) { return true; }
	if (val.length != 6 && val.length != 7) { return false; }
	if (val.length == 6) { val = GENGO_SYMBOL_HEISEI + val; }
	yy = val.substr(1, 2);
	mm = val.substr(3, 2);
	dd = val.substr(5, 2);
	if (IsJapaneseYearFormat(yy, false)) {
		if (IsMonthFormat(mm)) {
			if (IsDayFormat(dd)) {
				if (mode) {
					if (IsExistJapaneseDate(val)) { return true; }
				} else {
					return true;
				}
			}
		}
	}
	return false;
}
/*
'------------------------------------------------------------------------------
' 関数名	:IsJapaneseYearMonthFormat
' 機能		:指定文字列が和暦年月フォーマットとして成立するかチェックします
' 返り値	:true:正常 false:不良
' 引き数	:val - (入)指定文字列(yymm or Xyymm)
' 				 mode - (入)存在チェック(true:する false:しない)
' 機能説明:なし
' 備考		:なし
*/
function IsJapaneseYearMonthFormat(val, mode) {
	var yy, mm;

	if (val.length == 0) { return true; }
	if (val.length != 4 && val.length != 5) { return false; }
	if (val.length == 4) { val = GENGO_SYMBOL_HEISEI + val; }
	yy = val.substr(1, 2);
	mm = val.substr(3, 2);
	if (IsJapaneseYearFormat(yy, false)) {
		if (IsMonthFormat(mm)) {
			if (mode) {
				if (IsExistJapaneseYearMonth(val)) { return true; }
			} else {
				return true;
			}
		}
	}
	return false;
}
/*
'------------------------------------------------------------------------------
' 関数名	:IsJapaneseYearFormat
' 機能		:指定文字列が和暦年フォーマットとして成立するかチェックします
' 返り値	:true:正常 false:不良
' 引き数	:val - (入)指定文字列(yy or Xyy)
' 				 mode - (入)存在チェック(true:する false:しない)
' 機能説明:なし
' 備考		:なし
*/
function IsJapaneseYearFormat(val, mode) {
	var yy, rval, exp;

	if (val.length == 0) { return true; }
	if (val.length != 2 && val.length != 3) { return false; }
	if (val.length == 2) { val = GENGO_SYMBOL_HEISEI + val; }
	yy = val.substr(1, 2);
	exp = "[0-9]{1,2}";
	rval = yy.match(exp);
	if (rval == null) { return false; }
	if (rval.length > 1) { return false; }
	if (rval[0].length != yy.length) { return false; }
	if (yy >= 1 && yy <= 99) {
		if (mode) {
			if (IsExistJapaneseYear(val)) { return true; }
		} else {
			return true;
		}
	}
	return false;
}
/*
'------------------------------------------------------------------------------
' 関数名	:IsZenkakuString
' 機能		:指定文字列が全角文字のみで構成されているか判定します
' 返り値	:true:正常 false:不良
' 引き数	:val - (入)指定文字列
' 機能説明:なし
' 備考		:なし
*/
function IsZenkakuString(val) {
	var i, code;

	for(i = 0; i < val.length; i++) {
		code = escape(val.charCodeAt(i));
		if (escape(val.charAt(i)).length >= 4) {
			if (code >= 0xff61 && code <= 0xff9f) { return false; }
		} else {
			if (code >= 0x20 && code <= 0x80) { return false; }
		}
	}
	return true;
}
/*
'------------------------------------------------------------------------------
' 関数名	:IsHankakuString
' 機能		:指定文字列が半角文字のみで構成されているか判定します
' 返り値	:true:正常 false:不良
' 引き数	:val - (入)指定文字列
' 機能説明:なし
' 備考		:なし
*/
function IsHankakuString(val) {
	var i, code;

	for(i = 0; i < val.length; i++) {
		code = escape(val.charCodeAt(i));
		if (escape(val.charAt(i)).length >= 4) {
			if (code < 0xff61 || code > 0xff9f) { return false; }
		} else {
			if (code < 0x20 || code > 0x80) { return false; }
		}
	}
	return true;
}
/*
'------------------------------------------------------------------------------
' 関数名	:IsHankakuNumericString
' 機能		:指定文字列が半角数字のみで構成されているか判定します
' 返り値	:true:正常 false:不良
' 引き数	:val - (入)指定文字列
' 				 option - (入)追加文字列
' 機能説明:なし
' 備考		:追加文字列には、[.-]を想定している
*/
function IsHankakuNumericString(val, option) {
	if (arguments.length < 2) { option = ""; }
	if (option.length > 0) { option = MakeRegExpString(option); }
	return(val.search("[^0-9" + option +"]") == -1);
}
/*
'------------------------------------------------------------------------------
' 関数名	:IsHankakuKanaString
' 機能		:指定文字列が半角カナ文字のみで構成されているか判定します
' 返り値	:true:正常 false:不良
' 引き数	:val - (入)指定文字列
' 				 option - (入)追加文字列
' 機能説明:なし
' 備考		:追加文字列には、[ -]を想定している
*/
function IsHankakuKanaString(val, option) {
	if (arguments.length < 2) { option = ""; }
	if (option.length > 0) { option = MakeRegExpString(option); }
	return(val.search("[^" + cstr_hankakukana + option + "]") == -1);
}
/*
'------------------------------------------------------------------------------
' 関数名	:IsHankakuAlphanumericString
' 機能		:指定文字列が半角英数字のみで構成されているか判定します
' 返り値	:true:正常 false:不良
' 引き数	:val - (入)指定文字列
' 機能説明:なし
' 備考		:なし
*/
function IsHankakuAlphanumericString(val) {
	if (IsHankakuString(val)) {
		return(val.search("[" + cstr_hankakukana + "]") == -1);
	}
	return false;
}
/*
'------------------------------------------------------------------------------
' 関数名	:MakeRegExpString
' 機能		:指定文字列を正規表現文字列に変換します
' 返り値	:正規表現文字列
' 引き数	:val - (入)指定文字列
' 機能説明:なし
' 備考		:なし
*/
function MakeRegExpString(val) {
	var rval, i;

	rval = "";
	for (i = 0; i < val.length; i++) {
		rval += ("\\x" + (val.charCodeAt(i)).toString(16));
	}
	return rval;
}
/*
'------------------------------------------------------------------------------
' 関数名	:IsInternalExistString
' 機能		:指定文字列内にチェック文字列の文字が含まれているか判定します
' 返り値	:true:含まれている false:含まれていない
' 引き数	:val - (入)指定文字列
' 				 option - (入)チェック文字列
' 機能説明:なし
' 備考		:なし
*/
function IsInternalExistString(val, option) {
	if (arguments.length < 2) { option = ""; }
	if (option.length > 0) {
		option = MakeRegExpString(option);
		return(val.search("[" + option + "]") != -1);
	}
	return false;
}
/*------<< EOF >>------*/

