0

フィールドの確認:

checkFields = function() {
  var colCheck = 0;
  var colArray = [];
  var colDupArray = [];
  var iDate = $("check_date").value;
  if(iDate.length > 0) {
    var a = iDate.split("/"); 
    if(isValidDate(a[0],a[1]-1,a[2]) == false){
      alert("You have entered an invalid date. Please amend!");
      return false;
    }

検証:

isValidDate = function(day,month,year) {
  var dteDate;
  dteDate=new Date(year,month,day);

  var day = dteDate.getDate();
  var month = dteDate.getMonth() + 1;
  var year = dteDate.getFullYear();

  var formatted =
      (day < 10 ? "0" : "") + day + "/"  +
      (month < 10 ? "0" : "") + month + "/"  +
      year;

  return
+day === dteDate.getDate() && 
+month === dteDate.getMonth() &&
+year === dteDate.getFullYear();
}

問題は、数字の間のスラッシュのみを受け入れたいときに、コードが「03.06.2012」などの日付を受け入れていることです。

4桁の年のみが必要な場合は、「03/06/12」も受け入れます。

何か案は?

4

3 に答える 3

1

どういうわけか、書式設定と検証関数を混在させました。これは、次のようになります。

function isValidDate(day,month,year) {
    var dteDate = new Date(year,month,day);

    return +day === dteDate.getDate()
        && +month === dteDate.getMonth()
        && +year === dteDate.getFullYear();
}
function formatDate(dteDate) {
    var day = dteDate.getDate(),
        month = dteDate.getMonth() + 1,
        year = dteDate.getFullYear();

    var formatted = (day < 10 ? "0" : "") + day + "/"
                  + (month < 10 ? "0" : "") + month + "/"
                  + year;
    return formatted;
}
于 2013-05-01T18:53:51.913 に答える
1

少なくとも 4 桁の年の問題については、この jfiddle出力とコードを見てください。

d1 = new Date(1,2,3);
d2 = d1.getFullYear();
d3 = d1.getMonth();
d4 = d1.getDay();
alert(d2);
alert(d3);
alert(d4);

Date コンストラクターは、4 桁の数字について厳密ではありません (Mozilla が何をすべきだと言っているにもかかわらず)。上記の例では、int 1 を年としています。これは、長さが 4 文字ではない年を受け入れるプログラムに反映されています。

おそらく、年の文字列の長さをテストしますか?

分割に関しては、おそらく分割する正規表現を使用して、スラッシュのみを受け入れるようにすることができます (ここで提案されているように)?

于 2013-05-01T15:00:40.617 に答える