/* 各種入力チェック関数 Copyright (C) 2003 sysplan Inc. $Id: Chkfunc.js,v 1.9 2004/02/04 02:51:49 hoj Exp $ */ // 形式エラー表示 function alertMsg(msg,msg2,obj) { if( msg2 == '' ) { alert(msg+'の形式が間違っています'); } else { alert(msg+'の形式が間違っています。' + msg2); } obj.focus(); obj.select(); } //文字列長さチェック(Byte数制限)半角カナチェック複合 function chkLen(obj,maxlen,msg) { var str = obj.value; var len = str.length; var n = 0; var i; var zenlen = maxlen/2; //var retstr = ""; //var flg = 0; // 0の時は全角ハイフンなし for(i = 0; i < len; i++){ if(isHankaku(str.charAt(i))){ alertMsg(msg,'「'+ str.charAt(i) +'」は半角カナ文字です。',obj); return false; } if(isIzon(str.charAt(i))){ alertMsg(msg,'「'+ str.charAt(i) +'」は機種依存文字です。',obj); return false; } n += is_ie_zenkaku(str.charAt(i)) ? 2 : 1; } if( n > maxlen ){ alertMsg(msg,'\n入力できるのは、半角で'+maxlen+'文字まで、' +'全角で'+zenlen+'文字までです。',obj); return false; } } //--------テキストエリアの行数チェック /* obj: フォームオブジェクト maxrow: 最大行数 maxlen: 一行辺りの最大文字数 msg: 項目名称 */ function chkRows(obj, maxrow, maxlen, msg){ var zenlen = maxlen/2; var mystr = obj.value; var myary = mystr.split("\r\n"); if(myary.length > maxrow){ alertMsg(msg,'入力できる行数は'+maxrow+'行までです',obj); //エラー表示 return false; } for(var i=0;i maxlen && mystr.search("\n")!=-1){ alertMsg(msg,'\n一行に入力できるのは、半角で'+maxlen+'文字まで、' +'全角で'+zenlen+'文字まで\n行数は'+maxrow+'行以内です。',obj); return false; break; } } return true; } function is_ie_zenkaku(c) { return (escape(c).charAt(1) == "u"); } //--------半角カナチェック function isHkana(obj,msg) { var str = obj.value; var len = str.length; var n = 0; var i; for(i = 0; i < len; i++) { if(isHankaku(str.charAt(i))) alertMsg(msg,'「'+ str.charAt(i) +'」は半角カナ文字です。',obj); return false; } } //--------半角カナ文字チェック関数 (IE用) function isHankaku(c) { var str = escape(c); if(str.substring(0,4) != "%uFF") //IEの場合 unicode でチェック return false; if(str.charAt(4) == "6") return true; else if(str.charAt(4) == "7") return true; else if(str.charAt(4) == "8") return true; else if(str.charAt(4) == "9") return true; else return false; } //--------機種依存文字チェック(IE用) 13区のみ対応 function isIzon(c) { var str = escape(c); if(str.substring(0,4) == "%u24") return true; //丸文字 if(str.substring(0,4) == "%u33") return true; //Tel記号など if(str.substring(0,5) == "%u216") return true; //ローマ数字 if(str.substring(0,5) == "%u217") return true; //ローマ数字(小 return false; } // 数字チェック(メッセージ無し) 小数点チェック // num=数字, retpoint=許可する小数点以下の桁数(0の時は少数許可せず) function checkNumber(num,retpoint) { var flag = 0; if(isNaN(num))return 0; for(var i=0;i 0){ if(retpoint >= flag){ flag ++; } else { return 9; } } if(isNaN(parseInt(num.charAt(i),10))){ if(num.charAt(i)!='.') return 0; flag = 1; } } if(flag == 1) return 9; if(parseInt(num,10)<0) return 0; return 1; } // 数字チェック(メッセージ付き) function checkNum(obj,retpoint,msg) { switch( checkNumber(obj.value,retpoint) ){ case 0: alertMsg(msg,'数字以外の文字があります。',obj); return false; case 9: alertMsg(msg,'小数点エラーです。',obj); return false; default: return true; } } // 小数点&最大値を含む数字チェック function checkDbl(obj,retpoint,msg,max){ if(parseInt(obj.value) > max){ alertMsg(msg,'最大'+max+'までの数値を入力してください。',obj); return false; } if(!checkNum(obj,retpoint,msg)) return false; return true; } // 数字チェック(小数点及びマイナスを許可) function checkNum2(obj,retpoint,msg) { switch( checkNumber2(obj.value,retpoint) ){ case 0: alertMsg(msg,'数字以外の文字があります。',obj); return false; case 9: alertMsg(msg,'小数点エラーです。',obj); return false; default: return true; } } // 数字チェック(メッセージ無し) 小数点及びマイナスチェック // num=数字, retpoint=許可する小数点以下の桁数(0の時は少数許可せず) function checkNumber2(num,retpoint) { var flag = 0; if(isNaN(num))return 0; for(var i=0;i 0){ if(retpoint >= flag){ flag ++; } else { return 9; } } if(isNaN(parseInt(num.charAt(i),10))){ if((num.charAt(i)!='.') && (num.charAt(i)!='-')){ alert('test1'); return 0; } if((num.charAt(i)=='-') && (i!=0)) { alert('test2'); return 0; } if(num.charAt(i)!='-') flag = 1; } } if(flag == 1) return 9; return 1; } //半角英数字チェック(-_ も許可する) function chkEsuji(obj,msg) { var str = obj.value; var len = str.length; var n = 0; var i; for(i = 0; i < len; i++){ if(!isEsu(str.charAt(i))){ alertMsg(msg,'半角英数字以外の文字があります。',obj); return false; } } } function isEsu(str) { if (str.search(/[\w- .]/i) == -1) { //半角英数字チェック return false; }else{ return true; } } // NULL(必須)チェック function checkNull(obj,msg) { if(obj.value==''){ if( msg != '' ) alert(msg+'の入力は必須です'); obj.focus(); if(obj.type!='select-one') obj.select(); return false; } return true; } // 郵便番号チェック function checkZipCode(obj,retnull) { var retval=true; if (obj.value=='') retval=retnull; else { if( obj.value.length != 8 ) retval=false else { var del=obj.value.indexOf('-'); if (del != 3) retval=false; else { if (checkNumber(obj.value.substring(0,del))==0 || checkNumber(obj.value.substring(del+1,obj.value.length))==0){ retval=false; } } } } if(retval==false){ alertMsg('郵便番号', '999-9999の形式で入力してください。', obj); } return retval; } // 電話番号チェック function checkTel(obj,retnull,msg){ var retval = true; var num = obj.value; var flg = 0; //0の時は数字 if (num=='') retval=retnull; else { for(var i=0;i 10 || ymdstr.length < 8 ) { alertMsg('年月日','yyyy/mm/ddの形式で入力してください。', obj); return false; } else { yystr = ymdstr.substring(0, 4); if( isNaN(yystr) ) { alertMsg('年', '', obj); return false; } yy = parseInt(yystr,10); if(yy < 1900) { alertMsg('年', '', obj); return false; } delm = ymdstr.substring(4, 5); // 年と月の間の字 if( delm != '/' ) { alertMsg('年月日','yyyy/mm/ddの形式で入力してください。', obj); return false; } if( ymdstr.substring(6,7) == delm ) { // mmが1桁だった mmstr = ymdstr.substring(5, 6); ddstr = ymdstr.substring(7,ymdstr.length); } else if( ymdstr.substring(7,8) == delm ) { // mmが2桁だった mmstr = ymdstr.substring(5, 7); ddstr = ymdstr.substring(8,ymdstr.length); } else { alertMsg('月', '', obj); return false; } if( isNaN(mmstr) || mmstr == '' ) { alertMsg('月', '', obj); return false; } if( isNaN(ddstr) || ddstr == '' ) { alertMsg('日', '', obj); return false; } mm = parseInt(mmstr,10); dd = parseInt(ddstr,10); if( mm < 1 || mm > 12 ) { alertMsg('月', '', obj); return false; } if( dd < 1 || dd > 31 ) { alertMsg('日', '', obj); return false; } if( mm == 4 || mm == 6 || mm == 9 || mm == 11 ) { // 少の月 if( dd > 30 ) { alertMsg('日', '', obj); return false; } } else if( mm == 2 ) { // 2月 if( (yy % 4 ) == 0 ) dmax = 29; // これだけで1901〜2099までOK else dmax = 28; if( dd > dmax ) { alertMsg('日', '', obj); return false; } } } } if( retval == false ) { alertMsg('年月日', 'yyyy/mm/ddの形式で入力してください。', obj); } return retval; } // 年月日チェック ("YYYY/[M]M/[D]D"のチェック) その2 function checkYMD2(obj, retnull, msg) { var retval = true; if(obj.value == '' ) retval=retnull; else { var ymdstr=obj.value; if( ymdstr.length > 10 || ymdstr.length < 8 ) { alertMsg(msg,'yyyy/mm/ddの形式で入力してください。', obj); return false; } else { yystr = ymdstr.substring(0, 4); if( isNaN(yystr) ) { alertMsg(msg, '年の形式が間違っています', obj); return false; } yy = parseInt(yystr,10); if(yy < 1900) { alertMsg(msg, '年の形式が間違っています', obj); return false; } delm = ymdstr.substring(4, 5); // 年と月の間の字 if( delm != '/' ) { alertMsg(msg,'yyyy/mm/ddの形式で入力してください。', obj); return false; } if( ymdstr.substring(6,7) == delm ) { // mmが1桁だった mmstr = ymdstr.substring(5, 6); ddstr = ymdstr.substring(7,ymdstr.length); } else if( ymdstr.substring(7,8) == delm ) { // mmが2桁だった mmstr = ymdstr.substring(5, 7); ddstr = ymdstr.substring(8,ymdstr.length); } else { alertMsg(msg, '月の形式が間違っています', obj); return false; } if( isNaN(mmstr) || mmstr == '' ) { alertMsg(msg, '月の形式が間違っています', obj); return false; } if( isNaN(ddstr) || ddstr == '' ) { alertMsg(msg, '日の形式が間違っています', obj); return false; } mm = parseInt(mmstr,10); dd = parseInt(ddstr,10); if( mm < 1 || mm > 12 ) { alertMsg(msg, '月の形式が間違っています', obj); return false; } if( dd < 1 || dd > 31 ) { alertMsg(msg, '日の形式が間違っています', obj); return false; } if( mm == 4 || mm == 6 || mm == 9 || mm == 11 ) { // 少の月 if( dd > 30 ) { alertMsg(msg, '日の形式が間違っています', obj); return false; } } else if( mm == 2 ) { // 2月 if( (yy % 4 ) == 0 ) dmax = 29; // これだけで1901〜2099までOK else dmax = 28; if( dd > dmax ) { alertMsg(msg, '日の形式が間違っています', obj); return false; } } } } if( retval == false ) { alertMsg('年月日', 'yyyy/mm/ddの形式で入力してください。', obj); } return retval; } // 年月日チェック ("YYYY/[M]M/[D]D"のチェック) その3 // 警告メッセージなし版 function checkYMD3(obj, retnull) { var retval = true; if(obj.value == '' ) retval=retnull; else { var ymdstr=obj.value; if( ymdstr.length > 10 || ymdstr.length < 8 ) return false; else { yystr = ymdstr.substring(0, 4); if( isNaN(yystr) ) return false; yy = parseInt(yystr,10); if(yy < 1900) return false; delm = ymdstr.substring(4, 5); // 年と月の間の字 if( delm != '/' ) return false; if( ymdstr.substring(6,7) == delm ) { // mmが1桁だった mmstr = ymdstr.substring(5, 6); ddstr = ymdstr.substring(7,ymdstr.length); } else if( ymdstr.substring(7,8) == delm ) { // mmが2桁だった mmstr = ymdstr.substring(5, 7); ddstr = ymdstr.substring(8,ymdstr.length); } else { return false; } if( isNaN(mmstr) || mmstr == '' ) return false; if( isNaN(ddstr) || ddstr == '' ) return false; mm = parseInt(mmstr,10); dd = parseInt(ddstr,10); if( mm < 1 || mm > 12 ) return false; if( dd < 1 || dd > 31 ) return false; if( mm == 4 || mm == 6 || mm == 9 || mm == 11 ) { // 少の月 if( dd > 30 ) return false; } else if( mm == 2 ) { // 2月 if( (yy % 4 ) == 0 ) dmax = 29; //1901〜2099までOK else dmax = 28; if( dd > dmax ) return false; } } } return retval; } // 年月チェック("YYYY/[M]M" のチェック) function checkYM(obj, retnull) { var retval = true; if(obj.value == '' ) retval=retnull; else { var ymstr=obj.value; if( ymstr.length > 7 || ymstr.length < 6 ) { alertMsg('年月','yyyy/mmの形式で入力してください。', obj); return false; } else { yystr = ymstr.substring(0, 4); if( isNaN(yystr) ) { alertMsg('年', '', obj); return false; } yy = parseInt(yystr,10); if(yy < 1900) { alertMsg('年', '', obj); return false; } delm = ymstr.substring(4, 5); // 年と月の間の字 if( delm != '/' ) { alertMsg('年月','yyyy/mmの形式で入力してください。', obj); return false; } mmstr = ymstr.substring(5,ymstr.length); if( isNaN(mmstr) || mmstr == '' ) { alertMsg('月', '', obj); return false; } mm = parseInt(mmstr,10); if( mm < 1 || mm > 12 ) { alertMsg('月', '', obj); return false; } } } if( retval == false ) { alertMsg('年月', 'yyyy/mmの形式で入力してください。', obj); } return retval; } // 時分チェック("[H]H:[M]M" のチェック) function checkHM(obj, retnull) { if(obj.value == '' ) { if(! retnull) { alertMsg('時分','hh:mmの形式で入力してください。', obj); } return retnull; } var hmstr=obj.value; if( hmstr.length > 5 || hmstr.length < 3 ) { alertMsg('時分','hh:mmの形式で入力してください。', obj); return false; } var p = hmstr.indexOf(':'); if(p != 1 && p != 2) { alertMsg('時分', 'hh:mmの形式で入力してください。', obj); return false; } hhstr = hmstr.substring(0, p); mmstr = hmstr.substring(p+1); if( isNaN(hhstr) ) { alertMsg('時', '', obj); return false; } hh = parseInt(hhstr,10); if(hh < 0 || hh > 23 ) { alertMsg('時', '', obj); return false; } if( isNaN(mmstr) || mmstr == '' ) { alertMsg('分', '', obj); return false; } mm = parseInt(mmstr,10); if( mm < 0 || mm > 59 ) { alertMsg('分', '', obj); return false; } return true; } function checkMAddr(obj){ // メールアドレス以外が入力された場合は警告ダイアログを表示 if(!obj.value.match(/.+@.+\..+/)){ alert('メールアドレスが正しくありません'); return false; } return true; }