<!------------------------------------------------------------------------------------------------------------------------
<!--
<!--  チェック処理メイン
<!--	ce01_fncCheckMain : 入力チェックメイン
<!--	パラメータ
<!--	frmMe : フォームオブジェクト
<!--	
<!--	復帰値
<!--	TRUE:ＯＫ
<!--	FALSE：ＮＧ
<!--
<!------------------------------------------------------------------------------------------------------------------------
function ce01_fncCheckMain(frmMe) {
	ce01_subChangeCondition(frmMe);
	return ce01_fncCheckForm(frmMe);
}

<!------------------------------------------------------------------------------------------------------------------------
<!--
<!-- チェック条件切り替え
<!--	ce01_subChangecCondition : 条件切り替え
<!--	パラメータ
<!--	frmMe : フォームオブジェクト
<!--	
<!--	復帰値
<!--		なし
<!--
<!--	定義方法
<!--		hiddenオブジェクトでnameに"ChngCndXX"と定義する
<!--		valueにパラメータを設定。
<!--
<!--	[0]		チェック対象	オブジェクト名（リストボックス、チェックボックス、ラジオボタン）
<!--
<!--	[1]		判定方法		IXX:インデックス
<!--							V:値
<!--
<!--	[2]		条件			値(インデックスでの参照方法の場合は指定不要）
<!--
<!--	[3]		条件補助		=:上記条件を『満たす』場合切り替え
<!--							!:上記条件を『満たさない』場合切り替え
<!--
<!--	[4]		切り替え対象	checkXX
<!--
<!--	[5〜]	切り替え条件	checkXXへ代入するVALUE
<!--
<!--
<!--	作成者		近江
<!--	作成日		2000/01/29
<!--	修正履歴	
<!---------------------------------------------------------------------------------------------------------------------------
function ce01_subChangeCondition(frmMe) {
	var strItem
	var strParam
	var param

	var i,j

	var strObjName
	var strHowToRef
	var strCmpValue
	var strSub
	var strTarget
	var strNewParam

	var strObjType

	var blnChk
	var strOrignValue

	strItem = "";
	for (i = 0 ;i < frmMe.length ; i++) {
		strItem = frmMe.elements[i].name;
		if ((frmMe.elements[i].type == "hidden") && (strItem.match(/ChngCnd/i))) {
			
			strParam = "";			
			strParam = frmMe[strItem].value;
			param = strParam.split(",");

			strObjName = param[0];
			strHowToRef = param[1].toUpperCase( );
			strCmpValue = param[2];
			strSub = param[3];
			strTarget = param[4];
			strNewParam = param[5];
			for (j = 6 ;j < param.length ; j++) {
					strNewParam = strNewParam + "," + param[j];
			}

			//オブジェクトのタイプを調べる
			strObjType = "undefined";
			for (j = 0 ;j < frmMe.length ; j++) {
				if (frmMe.elements[j].name == strObjName){
					strObjType = frmMe.elements[j].type;
				}
			}

			blnChk = false;
			if (strObjType.match(/select/)){
				//リストボックス
				if (strHowToRef.match(/I/)){
					//指定されたインデックスが選択されているか
					if (frmMe[strObjName].options[parseInt(strHowToRef.replace("I",""))].selected){
						blnChk = true;
					}
				} else if (strHowToRef == "V"){
					//指定された値が選択されているか
					for (j = 0 ;j < frmMe[strObjName].length ; j++) {
						if (frmMe[strObjName].options[j].selected && frmMe[strObjName].options[j].value == strCmpValue){
							blnChk = true;
							break;
						}
					}
				}

				if (strSub == "!") {
					blnChk = !blnChk;
				}
			} else if (strObjType.match(/checkbox/)){
				//チェックボックス
				if (strHowToRef.match(/I/)){
					//指定されたインデックスが選択されているか
					if (frmMe[strObjName][parseInt(strHowToRef.replace("I",""))].checked){
						blnChk = true;
					}
				} else if (strHowToRef == "V"){
					//指定された値が選択されているか
					for (j = 0 ;j < frmMe[strObjName].length ; j++) {
						if (frmMe[strObjName][j].checked && frmMe[strObjName][j].value == strCmpValue){
							blnChk = true;
							break;
						}
					}
				}

				if (strSub == "!") {
					blnChk = !blnChk;
				}
			} else if (strObjType.match(/radio/)){
				//ラジオボタン
				if (strHowToRef.match(/I/)){
					//指定されたインデックスが選択されているか
					if (frmMe[strObjName][parseInt(strHowToRef.replace("I",""))].checked){
						blnChk = true;
					}
				} else if (strHowToRef == "V"){
					//指定された値が選択されているか
					for (j = 0 ;j < frmMe[strObjName].length ; j++) {
						if (frmMe[strObjName][j].checked && frmMe[strObjName][j].value == strCmpValue){
							blnChk = true;
							break;
						}
					}
				}

				if (strSub == "!") {
					blnChk = !blnChk;
				}
			}

			//条件の切り替え
			if (blnChk){
				frmMe[strTarget].value = strNewParam;
			}
		}
	}
}



<!------------------------------------------------------------------------------------------------------------------------
<!--
<!-- 入力チェック関連
<!--	ce01_fncCheckForm : 入力チェック
<!--	パラメータ
<!--	frmMe : フォームオブジェクト
<!--	
<!--	復帰値
<!--	TRUE:ＯＫ
<!--	FALSE：ＮＧ
<!--
<!--	定義方法
<!--		hiddenオブジェクトでnameに"checkXX"と定義する
<!--		valueにパラメータを設定。
<!--
<!--	[0]		チェック対象	オブジェクト名（属性Dの場合は、複数のオブジェクト名をobjNengo/objYYYY/objMM/objDDと表記）
<!--
<!--	[1]		チェック種別	0:未必須
<!--							1:必須
<!--
<!--	[2]		許可属性		9:数値（半角）						]
<!--							N:半角数字							┐
<!--							A:半角英字							│併用可能
<!--							S:半角記号							│
<!--							E:文字指定（半角）					┘
<!--							Z:全角(半角カナ含む）				]
<!--							D:日付								┐
<!--								objNengo.value =	0:西暦		│
<!--													1867:明治	│
<!--													1911:大正	│
<!--													1925:昭和	│
<!--													1988:平成	┘
<!--								※各オブジェクトの（必須or未必須）確認済みなこと
<!--								※オブジェクトはhidden,text,selectに対応
<!--							M:メールアドレス					]
<!--							-:判定しない						]
<!--
<!--	[3]		指定文字
<!--			例外１	@D:ダブルクォーテーション
<!--			例外２	@C:カンマ
<!--			例外３	@Y:\マーク
<!--			例外４	@S:シングルクォーテーション
<!--
<!--	[4]		文字数ＭＩＮ	-:判定しない
<!--
<!--	[5]		文字数ＭＡＸ	-:判定しない
<!--
<!--	[6]		数値ＭＩＮ		-:判定しない
<!--
<!--	[7]		数値ＭＡＸ		-:判定しない
<!--
<!--	[8]		選択ＭＩＮ		-:判定しない
<!--
<!--	[9]		選択ＭＡＸ		-:判定しない
<!--
<!--	[10]	フォーカス		-:フォーカス移動しない
<!--			※text,textarea,select,file,passwordにのみ対応
<!--	[11]	オブジェクト和名
<!--
<!--	原作者		沼山
<!--	改造者		近江
<!--	作成日		2001/01/29
<!--	修正履歴	
<!--
<!---------------------------------------------------------------------------------------------------------------------------
function ce01_fncCheckForm(frmMe) {
	var strItem
	var strParam
	var param

	var strObjName
	var strHowToCheck
	var strAttribute
	var strExtra
	var intLenMin
	var intLenMax
	var numValMin
	var numValMax
	var intSelectMin
	var intSelectMax
	var strFocusObjName
	var strObjDispName

	var strObjDateName

	var strObjType

	var varValue
	var intSelected

	var strMsg
	var blnCheck

	var strOkStrings

	var intNengo
	var intYYYY
	var intMM
	var intDD

	strItem = "";
	strMsg = "";
	blnCheck = true;
	for (i = 0 ;i < frmMe.length ; i++) {
		strItem = frmMe.elements[i].name;
		if ((frmMe.elements[i].type == "hidden") && (strItem.match(/check/i))) {

			//パラメータの取得
			strParam = "";			
			strParam = frmMe[strItem].value;
			param = strParam.split(",");

			strObjDateName = param[0].split("/");
			strObjName = strObjDateName[0];
			strHowToCheck = param[1];
			strAttribute = param[2];
			strExtra = param[3];
			intLenMin = param[4];
			intLenMax = param[5];
			numValMin = param[6];
			numValMax = param[7];
			intSelectMin = param[8];
			intSelectMax = param[9];
			strFocusObjName = param[10];
			strObjDispName = param[11];

			//参照オブジェクトのタイプを調べる
			strObjType = "undefined";
			for (j = 0 ;j < frmMe.length ; j++) {
				if (frmMe.elements[j].name == strObjName){
					strObjType = frmMe.elements[j].type;
				}
			}

			//参照オブジェクトの値（選択数）を取得
			varValue = "";
			intSelected = 0;
			if (strObjType.match(/text/) || strObjType.match(/hidden/) || strObjType.match(/file/) || strObjType.match(/password/)){
				varValue = frmMe[strObjName].value;
				if (((varValue.replace(/ /g,"")).replace(/　/g,"")).length > 0){
					intSelected++;
				}
			} else if (strObjType.match(/select/)){
				for (j = 0 ;j < frmMe[strObjName].length ; j++) {
					if (frmMe[strObjName].options[j].selected && frmMe[strObjName].options[j].value != "" && frmMe[strObjName].options[j].value != null){
						varValue = varValue + frmMe[strObjName].options[j].value;
						intSelected++;
					}
				}
			} else if (strObjType.match(/checkbox/)){
				if (isNaN(frmMe[strObjName].length)){
					if (frmMe[strObjName].checked){
							varValue = frmMe[strObjName].value;
							intSelected = 1;
					}
				} else {
					for (j = 0 ;j < frmMe[strObjName].length ; j++) {
						if (frmMe[strObjName][j].checked){
							varValue = varValue + frmMe[strObjName][j].value;
							intSelected++;
						}
					}
				}
			}

			//必須項目入力チェック（日付型の場合は属性チェック内で行う）
			if (intSelected == 0 && strHowToCheck == "1"){
				if (strObjType.match(/text/) || strObjType.match(/file/) || strObjType.match(/password/)){
					strMsg = "入力項目(" + strObjDispName + ")を入力してください。";
				} else {
					strMsg = "選択項目(" + strObjDispName + ")を選択してください。";
				}
				blnCheck = false;
				break;
			}

			//文字属性チェック
			strOkStrings = "";
			if (strAttribute.match(/9/)){
				//数値
				if (isNaN(varValue)) {
					strMsg = "入力項目(" + strObjDispName + ")は半角で数値を入力してください。";
					blnCheck = false
					break;
				}
			} else if (strAttribute.match(/N/) || strAttribute.match(/A/) || strAttribute.match(/S/) || strAttribute.match(/E/)){
				//半角文字
				strMsg = "入力項目(" + strObjDispName + ")で使用可能な文字は以下の通りです。\n";
				//数字
				if (strAttribute.match(/N/)){
					strOkStrings = strOkStrings + "0123456789";
					strMsg = strMsg + "\t・半角数字\n";
				}
				//英字
				if (strAttribute.match(/A/)){
					strOkStrings = strOkStrings + "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
					strMsg = strMsg + "\t・半角英字\n";
				}
				//記号
				if (strAttribute.match(/S/)){
					strOkStrings = strOkStrings + "-^@[:;]./!#$%&()=~|`{+*}<>?_@C@D@Y@S";
					strMsg = strMsg + "\t・半角記号\n";
				}
				//指定文字
				if (strAttribute.match(/E/)){
					strOkStrings = strOkStrings + strExtra;
					strMsg = strMsg + "\t・" + strExtra + "\n";
					strMsg = strMsg.replace("@D","\"");
					strMsg = strMsg.replace("@C",",");
					strMsg = strMsg.replace("@Y","\\");
					strMsg = strMsg.replace("@S","\'");
				}
				strOkStrings = strOkStrings.replace("@D","\"");
				strOkStrings = strOkStrings.replace("@C",",");
				strOkStrings = strOkStrings.replace("@Y","\\");
				strOkStrings = strOkStrings.replace("@S","\'");

				if (!check_hankaku(varValue,strOkStrings)){
					blnCheck = false
					break;
				}
			} else if (strAttribute.match(/Z/)){
				//全角
				if (!check_zenkaku(varValue)){
					strMsg = "入力項目(" + strObjDispName + ")は全角で入力してください。";
					blnCheck = false
					break;
				}
			} else if (strAttribute.match(/D/)){
				//年号は確定していることが前提
				intNengo = ce01_fncGetValue(frmMe[strObjDateName[0]]);
				intYYYY = ce01_fncGetValue(frmMe[strObjDateName[1]]);
				intMM = ce01_fncGetValue(frmMe[strObjDateName[2]]);
				intDD = ce01_fncGetValue(frmMe[strObjDateName[3]]);

				if (strHowToCheck == "1" || 
					!(strHowToCheck == "0" && 
						(intYYYY == "" || intYYYY == null) && 
						(intMM == "" || intMM == null) && 
						(intDD == "" || intDD == null))){

					intNengo = parseInt(intNengo);
					intYYYY = parseInt(intYYYY);
					intMM = parseInt(intMM) - 1; 	// Javascriptは、0-11で表現;
					intDD = parseInt(intDD);

					intYYYY = intYYYY + intNengo;

					if (!check_date(intYYYY,intMM,intDD)) {
						strMsg = "入力項目(" + strObjDispName + ")に正しい日付を入力してください。\n\n";
						strMsg = strMsg + "[注]上位の桁をゼロで埋めないでください。\n";
						strMsg = strMsg + "例○・・・2001年3月4日\n";
						strMsg = strMsg + "例×・・・2001年03月04日\n";
						blnCheck = false
						break;
					}
				}
			} else if (strAttribute.match(/M/) && (strHowToCheck == "1" || varValue.length > 0)){
				//メールアドレス
				strMsg = "";
				//フリーメールアドレス不可
				strMsg = Check_MailAddress(varValue,true);
				if (strMsg != ""){
					blnCheck = false
					break;
				}
			}

			//文字数チェック
			if ((strHowToCheck == "1" || varValue.length > 0) && 
				(strAttribute.match(/N/) || 
				 strAttribute.match(/A/) || 
				 strAttribute.match(/S/) || 
				 strAttribute.match(/E/) || 
				 strAttribute.match(/Z/) || 
				 strAttribute.match(/M/) || 
				 strAttribute.match(/-/))){
				//文字数チェック（固定長）
				if ((intLenMin == intLenMax) && (intLenMin != "-")){
					if (varValue.length != parseInt(intLenMin)){
						strMsg = "入力項目(" + strObjDispName + ")は" + intLenMin + "文字で入力してください。";
						blnCheck = false
						break;
					}
				}

				//文字数ＭＩＮチェック
				if (!(intLenMin == "-")) {
					if (varValue.length < parseInt(intLenMin)){
						if (intLenMax == "-") {
							strMsg = "入力項目(" + strObjDispName + ")は" + intLenMin + "文字以上で入力してください。";
						} else {
							strMsg = "入力項目(" + strObjDispName + ")は" + intLenMin + "〜" + intLenMax + "文字で入力してください。";
						}
						blnCheck = false
						break;
					}
				}

				//文字数ＭＡＸチェック
				if (!(intLenMax == "-")) {
					if (varValue.length > parseInt(intLenMax)){
						if (intLenMin == "-") {
							strMsg = "入力項目(" + strObjDispName + ")は" + intLenMax + "文字以下で入力してください。";
						} else {
							strMsg = "入力項目(" + strObjDispName + ")は" + intLenMin + "〜" + intLenMax + "文字で入力してください。";
						}
						blnCheck = false
						break;
					}
				}
			}

			//値チェック
			if ((strHowToCheck == "1" || varValue.length > 0) && (strAttribute.match(/9/))){
				//値ＭＩＮチェック
				if (!(numValMin == "-")) {
					if (Number(varValue) < numValMin){
						if (numValMax == "-") {
							strMsg = "入力項目(" + strObjDispName + ")は" + numValMin + "以上の値で入力してください。";
						} else {
							strMsg = "入力項目(" + strObjDispName + ")は" + numValMin + "〜" + numValMax + "の値で入力してください。";
						}
						blnCheck = false
						break;
					}
				}

				//値ＭＡＸチェック
				if (!(numValMax == "-")) {
					if ((Number(varValue) > numValMax)){
						if (numValMin == "-") {
							strMsg = "入力項目(" + strObjDispName + ")は" + numValMax + "以下の値で入力してください。";
						} else {
							strMsg = "入力項目(" + strObjDispName + ")は" + numValMin + "〜" + numValMax + "の値で入力してください。";
						}
						blnCheck = false
						break;
					}
				}
			}

			//選択数チェック
			if ((!(intSelectMin.match(/-/)) || !(intSelectMax.match(/-/))) &&
				!(strHowToCheck == "0" && intSelected == 0)){
				//選択数チェック（固定）
				if ((intSelectMin == intSelectMax) && (intSelectMin != "-")){
					if (intSelected != parseInt(intSelectMin)){
						strMsg = "選択項目(" + strObjDispName + ")は" + intSelectMin + "個選択してください。";
						blnCheck = false
						break;
					}
				}

				//選択数ＭＩＮチェック
				if (!(intSelectMin == "-")) {
					if (intSelected < parseInt(intSelectMin)){
						if (intSelectMax == "-") {
							strMsg = "選択項目(" + strObjDispName + ")は" + intSelectMin + "個以上選択してください。";
						} else {
							strMsg = "選択項目(" + strObjDispName + ")は" + intSelectMin + "〜" + intSelectMax + "個選択してください。";
						}
						blnCheck = false
						break;
					}
				}

				//選択数ＭＡＸチェック
				if (!(intSelectMax == "-")) {
					if (intSelected > parseInt(intSelectMax)){
						if (intSelectMin == "-") {
							strMsg = "選択項目(" + strObjDispName + ")は" + intSelectMax + "個以下選択してください。";
						} else {
							strMsg = "選択項目(" + strObjDispName + ")は" + intSelectMin + "〜" + intSelectMax + "個選択してください。";
						}
						blnCheck = false
						break;
					}
				}
			}
		}
	}

	//エラーメッセージの表示
	if (!blnCheck) {
		alert(strMsg);
		//フォーカスの設定
		if (strFocusObjName != "-") {
		    frmMe[strFocusObjName].focus();
		}
	}

	//処理完了
	return blnCheck;
}



//********************************************
// メールアドレス妥当性チェック関数
// パラメータ  in  obj : メールアドレス
//             out err : エラーメッセージ
//             in  fmcheck  : フリーメール拒否
//********************************************
function Check_MailAddress(obj, fmcheck)
{
	var err
	var i
	var intIndex
	var chkFlg
	var strArrowEmail ="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-^@[:;]./\\!\"#$%&\'()=~|`{+*}<>?_"

	for(i = 0; i < obj.length; i++){
		chkchar = obj.charAt(i);
		chkFlg = strArrowEmail.indexOf(chkchar, 0);
		if(chkFlg == -1){
			err = "メールアドレスとして使用不可な文字が含まれています。";
			return err;
		}
	}
	intIndex = obj.indexOf('@', 0);
	if (intIndex == -1){
		err = "メールアドレスに誤りがあります。";
		return err;
	}
	if (intIndex == 0){
		err = "メールアドレスに誤りがあります。";
		return err;
	}
	if (intIndex == (obj.length - 1)){
		err = "メールアドレスに誤りがあります。";
		return err;
	}
	intIndex = obj.indexOf('@', intIndex + 1);
	if (intIndex != -1){
		err = "メールアドレスに誤りがあります。";
		return err;
	}

	//フリーメールチェック
	if(fmcheck){
		if (obj.indexOf('hotmail.com', 0) != -1){
			err = "無料メールアドレスは登録できません。";
			return err;
		}
		if (obj.indexOf('excite.co.jp', 0) != -1){
			err = "無料メールアドレスは登録できません。";
			return err;
		}
		if (obj.indexOf('mail.goo.ne.jp', 0) != -1){
			err = "無料メールアドレスは登録できません。";
			return err;
		}
		if (obj.indexOf('moon.co.jp', 0) != -1){
			err = "無料メールアドレスは登録できません。";
			return err;
		}
		if (obj.indexOf('nihonnic.com', 0) != -1){
			err = "無料メールアドレスは登録できません。";
			return err;
		}
		if (obj.indexOf('yahoo.co.jp', 0) != -1){
			err = "無料メールアドレスは登録できません。";
			return err;
		}
	}
	return "";
}


//********************************************
// 半角文字チェック関数
// パラメータ  in  varValue : チェック文字列
//             in  strOkStrings  : 許可文字列
//             out true:正常　/　false:エラー
//********************************************
function check_hankaku(varValue,strOkStrings) {
	var i
	var chkchar,chkFlg

	for(i = 0; i < varValue.length; i++){
		chkchar = varValue.charAt(i);
		chkFlg = strOkStrings.indexOf(chkchar, 0);
		if(chkFlg == -1){
			return false;
		}
	}

	return true;
}

//********************************************
// 全角文字チェック関数
// パラメータ  in  strValue : チェック文字列
//             out true:正常　/　false:エラー
//********************************************
function check_zenkaku(strValue) {
	var i

	for (i = 0; i < strValue.length ; i++) {
		if ((((strValue.charAt(i) >= "A") && ("Z" >= strValue.charAt(i)))) ||
			(((strValue.charAt(i) >= "a") && ("z" >= strValue.charAt(i)))) ||
			(((strValue.charAt(i) >= "0") && ("9" >= strValue.charAt(i))))) 
		{
			return false;
		}
	}
	return true;
}

//********************************************
// Value取得関数
// パラメータ  in  objElement : 参照オブジェクト
//             out 参照対象オブジェクトの値
//********************************************
function ce01_fncGetValue(objElement) {
	var i
	var varValue

	varValue = "";
	if ((objElement.type).match(/text/) || (objElement.type).match(/hidden/) || (objElement.type).match(/file/) || (objElement.type).match(/password/)){
		varValue = objElement.value;
	} else if ((objElement.type).match(/select/)){
		for (i = 0 ;i < objElement.length ; i++) {
			if (objElement.options[i].selected){
				varValue = objElement.options[i].value;
				break;
			}
		}
	} else if ((objElement.type).match(/checkbox/)){
		if (isNaN(objElement.length)){
			if (objElement.checked){
				varValue = objElement.value;
			}
		} else {
			for (i = 0 ;i < objElement.length ; i++) {
				if (objElement[i].checked){
					varValue = objElement[i].value;
					break;
				}
			}
		}
	}
	return varValue;
}

//********************************************
// 日付チェック関数
// パラメータ  in  intYYYY : 年（西暦）
//             in  intMM  : 月（0-11）
//             in  intDD  : 日
//             out true:正常　/　false:エラー
//********************************************
function check_date(intYYYY,intMM,intDD) {
	// 月,日の妥当性チェック
	if (intMM >= 0 && intMM <= 11 && intDD >= 1 && intDD <= 31) {
	    var vDt = new Date(intYYYY, intMM, intDD);
	    if (isNaN(vDt)){
	        return false;
	    } else if (vDt.getFullYear() == intYYYY && vDt.getMonth() == intMM && vDt.getDate() == intDD){
	        return true;
	    }
	} else {
	    return false;
	}
}
