0

以下のような3つのテキストボックスがあります

<input type="text" name="birth_year" id="birth_year" maxLength="4" size="4">Year 
<input type="text" name="birth_month" id="birth_month" maxLength="2" size="2">Month
<input type="text" name="birth_day" id="birth_day" maxLength="2" size="2">Day

[2012] Year [09] Month [13] Day

その日付を JQ で検証するにはどうすればよいですか?

私はそれを2日間探していました。

ただし、この XXXX-XX-XX のような形式のものは見つかりませんでした。

このjsFiddleを見つけましたが、これは03や22のような2桁の月または日を検証しません

どんな助けでも大歓迎です

4

2 に答える 2

0

それは実際には非常に簡単です。

var year = document.getElementsByName("birth_year")[0].value,
    month = document.getElementsByName("birth_month")[0].value,
    day = document.getElementsByName("birth_day")[0].value,
    date = new Date(year + "-" + month + "-" + day);

if (isNaN(date.getTime())) {
    // The date is invalid
}

残念ながら、これはIE8のような古いブラウザでは機能しません。これは、それらがyyyy-mm-ddの日付形式を受け入れないためです。ただし、日付は次のように書き直すことができます。

var date = new Date(month + "/" + day + "/" + year);

(mm / dd / yyyyの形式は意味がないと思いますが、まあ...これはJavascriptが最初の定義以来どのように機能するかです。)

于 2012-09-13T14:34:40.440 に答える
0

より良い検証 (作業例を参照)。誕生日を尋ねる場合は、それが妥当かどうかも確認してみてはいかがでしょうか。最初の部分では、無効な日付 (その月の特定の範囲外の日付を含む範囲外) をチェックします。2番目の部分は、まだ生まれていない、または年を取りすぎてもっともらしくない人々を追い出します。

/**
 * input is year/month/day (month from 1 to 12, day from 1 to 31)
 * output is boolean: true if correct and in-range, false if not
 */
function isValidBirthdate(year, month, day, minAge, maxAge) {
  // javascript days expect zero-based days and months
  month --; day --;
  var saysWasBorn = new Date(year, month, day);
  if (saysWasBorn.getDate() != day
    || saysWasBorn.getMonth() != month
    || saysWasBorn.getFullYear() != year) {
        console.log("impossible date: ");     
        return false;
  }
  var now = new Date();
  var yearsOld = now.getFullYear() - saysWasBorn.getFullYear();
  if ((now.getMonth()*40 + now.getDate() - 1) < 
      (saysWasBorn.getMonth()*40 + saysWasBorn.getDate())) {
     yearsOld --;                
  }
  if (yearsOld > maxAge) {
    console.log("too old");        
    return false;
  } else if (yearsOld < minAge) {
    console.log("too young");
    return false;
  }
  return true;
}
于 2012-09-13T14:42:25.630 に答える