5

次のようにコード化された日付を入力できるhtmlフォームフィールドがあります。

input type="text" name="dateofbirth" placeholder="dd/mm/yyyy"

日付が次の形式で入力されていることを確認するJavaScriptを見つけようとしていdd/mm/yyyyます(つまり、10文字、2/2/4)

コメントをいただければ幸いです。初めてjavascriptを実行し、この問題が発生するまで順調に進んでいます。

編集:コード(フォーム名は'サインアップ)

// JavaScript Document
function validateForm(signup) {
  {
    var x = document.forms["signup"]["dateofbirth"].value;
    var reg = /(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d/;
    if (x.match(reg)) {
      return true;
    }
    else {
      alert("Please enter dd/mm/yyyy");
      return false;
    }           
  }
}
4

6 に答える 6

6

正規表現を使用したjavascriptを介して、提供された形式で日付を検証できます。以下に示すサンプルコード。

function(input){
  var reg = /(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d/;
  if (input.match(reg)) {
    alert("Input matched");
  else {
    alert("Please enter dd/mm/yyyy");
  }
}
于 2012-04-17T15:57:50.860 に答える
1

私が見つけた最高の JavaScript 日付ライブラリは、http://code.google.com/p/datejs/ の date.js です

また、文化に対応しているため、dd/mm/yyyy の日付を検証するには (米国にいないと仮定します)、次のように Date.parse を使用します。

var d1 = Date.parse("01/12/2004"); // returns a valid JavaScript date
var d2 = Date.parse("30/02/2004"); // returns null
于 2012-04-17T16:17:13.850 に答える
1

Moment.js JavaScript ライブラリを見たことがありますか?

http://momentjs.com/

まだ使用していませんが、Javascript コードを移行する予定です。

于 2012-04-17T15:53:16.893 に答える
0

Web ブラウザーのエラー コンソールを調べて、JS 構文またはランタイム エラーが発生していないことを確認しましたか? 質問に追加した JavaScript コードは驚くべきことに有効ではありません(関数本体を余分{にラップしています)。}

ヒント: 正規表現を使用して文字列の有効性をテストする場合は、簡素化とパフォーマンスと自己文書化のためif (regex.test(str))ではなく、andを使用する必要があります。if (str.match(regex))

あなたの要件を考えると、私はこれを行います:

function isDDMMYYYY(str){
  return /^\d{2}/\d{2}/\d{4}$/.test(str);
}

ただし、ユーザーが 1 桁の日と月を入力できるように要件を個人的に変更します。

return /^\d{1,2}/\d{1,2}/\d{4}$/.test(str);
于 2012-04-17T16:24:42.987 に答える
0

正規表現については MDN ガイドを参照してください。数字に一致する文字クラスに関する情報が必要になります。「数字の文字に一致する」というフレーズを検索してください。一致の正確な長さを指定する方法 - このガイドで「直前の文字の正確な n 回の出現に一致」というフレーズを検索します。

于 2012-04-17T15:49:35.367 に答える
0

検証日付には、2月28日や閏年の29日などのすべての役割が含まれます

function leapYear(year) {
    return ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0);
}



function validateDayMonth(day, month, year) {
        var months = ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"];
        var days = ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31"];
        if (months.indexOf(month) != -1 && days.indexOf(day) != -1) {
            if ((month == '02' && day == '29' && leapYear(year) == false) || (month == '02' && day == '30') || (month == '02' && day == '31') || (month == '04' && day == '31') || (month == '06' && day == '31') || (month == '09' && day == '31') || (month == '11' && day == '31')) {
                return false;
            } else {
                var GivenDate = year + '-' + month + '-' + day;
                var CurrentDate = new Date();
                GivenDate = new Date(GivenDate);
                if (GivenDate > CurrentDate) {
                    return false;
                } else {
                    return true;
                }
            }
        } else {
            return false;
        }

    }
于 2019-06-14T20:48:47.657 に答える