• ベストアンサー

年月日のチェックなんですが…

いつもお世話になっております。 数日に渡り、あれこれと模索していましたが、どうしても分からないのでご質問させて頂きます。 どなたかご教授頂ければ幸いです。 やりたい内容と致しましては、 複数あるテキストの年月日が正しいものであるかどうかのチェックをJavascriptで行いたいのですが、どうしても始めの1つしかチェックを行ってもらえず、2つ目は全くチェックがかからない状態です。 どうやればいいのでしょうか… 因みにソースは以下の様に書いてみました。 <html> <meta http-equiv="Content-Type" content="text/html;charset=EUC-JP"> <head> <title>月日チェック</title> <script language="JavaScript"><!-- function check() {  txt = document.myFORM.elements["num[]"][0].value;  txt2 = document.myFORM.elements["num[]"][1].value;  var hoge = [ txt,txt2 ];  for(i=0; i<2; i++) {   if(!hoge[i] == "") {    if(!hoge[i].match(/^\d{4}\/\d{1,2}\/\d{1,2}$/) ){     alert("開始日の入力に誤りがあります\n\n例:2009/01/01 or 2009/1/1");     return false;    }    myData = hoge[i].split("/");    var vYear = myData[0] - 0;    var vMonth = myData[1] - 1;    var vDay = myData[2] - 0;    if(vMonth >= 0 && vMonth <= 11 && vDay >= 1 && vDay <= 31){     var vDt = new Date(vYear, vMonth, vDay);     if(vDt.getFullYear() == vYear && vDt.getMonth() == vMonth && vDt.getDate() == vDay){      return true;     }else {      alert("正しい月日を入力して下さい");      return false;     }    }else {     alert("正しい月日を入力して下さい");     return false;    }   }  } } // --></script> </head> <body> <form name="myFORM" method="post" action="res.html" onSubmit="return check()"> <input type="text" size="16" name="num[]"> <br> <input type="text" size="16" name="num[]"> <input type="submit" value="調べる"> </form> </body> </html>

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

当然の結果に思えます    if(vMonth >= 0 && vMonth <= 11 && vDay >= 1 && vDay <= 31){     var vDt = new Date(vYear, vMonth, vDay);     if(vDt.getFullYear() == vYear && vDt.getMonth() == vMonth && vDt.getDate() == vDay){      return true;     }else {      alert("正しい月日を入力して下さい");      return false;     }    }else {     alert("正しい月日を入力して下さい");     return false;    } の部分で 1つめのデータのチェックが終了した時点で このCheck関数から抜けてしまいますので ・・・ チェック対象は複数あるのでしたら そのチェック項目分の結果を保存して すべてのチャックが終了してからtrueを返すようにしましょう ループに入る前に 結果を保存する変数を準備  var hoge = [ txt,txt2 ];  var flag;  flag = false;  for(i=0; i<2; i++) { チェックが成功した場合    if(vMonth >= 0 && vMonth <= 11 && vDay >= 1 && vDay <= 31){     var vDt = new Date(vYear, vMonth, vDay);     if(vDt.getFullYear() == vYear && vDt.getMonth() == vMonth && vDt.getDate() == vDay){      // return true;      // リターンするのでは無く 結果を一時保存する      flag = true;     }else { ループが終了してから Trueを返す    }else {     alert("正しい月日を入力して下さい");     return false;    }   }  }  return flag; といった具合に

nkm-a3u-ki
質問者

お礼

redfox63様 ご教授ありがとうございます。 早速redfox63様にご指摘して頂いた通り書き直してみたところ、期待通りの結果を得ることが出来ました!! まさに感動です☆★ この度は誠にありがとうございました。

その他の回答 (1)

回答No.2

まつびをかえすかんすうかも?ばぶぅ~。 alert(matubi(2008,2)); function matubi ( y, m ){ return 30 + (--m<7^m&1)-(m==1)*(1+(y%4>0^y%100>0^y%400>0)); } ふようなら--mを、ふつうにmに。

nkm-a3u-ki
質問者

お礼

babu_baboo様 ご教授ありがとうございます。 babu_baboo様にご指摘して頂いた関数も参考に 今後のプログラミングに役立てて行きたいと思います。 この度はありがとうございました★

関連するQ&A