1. ホーム
  2. javascript

[解決済み】JQuery Validateを使用してdd/mm/yyyy形式の日付を検証する【重複あり

2022-02-11 12:55:25

質問

生年月日と没年月日を入力しています。バリデーションが必要です。

  1. 死亡日は生年月日以上でなければなりません。
  2. {を使用します。 日付の書式をdd/mm/yyyyにすること {を使用します。 日付が今日以下であること

Validateが期待通りに動作せず、問題を把握できない。助けてください。

フィドルコード

使用したJSライブラリ

  1. カレンダー/日付ピッカー用JQuery UI
  2. {を使用します。 JQuery validate(フォームバリデーション
  3. バリデーションライブラリの追加メソッド

    var today = new Date();
    var authorValidator = $("#itemAuthorForm").validate({
    rules : {
        dateOfBirth : {
            required : false,
            date : true,
            dateITA : true,
            dateLessThan : '#expiredDate'
        },
        expiredDate : {
            required : false,
            date : true,
            dateITA : true,
            dateGreaterThan : "#dateOfBirth"
        }
    },
    onfocusout : function(element) {
        if ($(element).val()) {
            $(element).valid();
        }
    }
    });
    var dateOptionsDOE = {
    maxDate : today,
    dateFormat : "dd/mm/yy",
    changeMonth : true,
    changeYear : true,
    onClose : function(selectedDate) {
        $("#dateOfBirth").datepicker("option", "maxDate", selectedDate);
    }
    };
    var dateOptionsDOB = {
    maxDate : today,
    dateFormat : "dd/mm/yy",
    changeMonth : true,
    changeYear : true,
    onClose : function(selectedDate) {
        $("#expiredDate").datepicker("option", "minDate", selectedDate);
    }
     };
    
    jQuery.validator.addMethod("dateGreaterThan",
    function(value, element, params) {
    if ($(params).val() === "")
        return true;
    
    if (!/Invalid|NaN/.test(new Date(value))) {
        return new Date(value) > new Date($(params).val());
    }
    return isNaN(value) && isNaN($(params).val())
            || (Number(value) > Number($(params).val()));
            }, 'Must be greater than {0}.');
            jQuery.validator.addMethod("dateLessThan",
            function(value, element, params) {
    if ($(params).val() === "")
        return true;
    
    if (!/Invalid|NaN/.test(new Date(value))) {
        return new Date(value) < new Date($(params).val());
    }
    
    return isNaN(value) && isNaN($(params).val())
            || (Number(value) < Number($(params).val()));
            }, 'Must be less than {0}.');
            $("#expiredDate").datepicker(
        $.extend({}, $.datepicker.regional['en-GB'], dateOptionsDOE));
            $("#dateOfBirth").datepicker(
        $.extend({}, $.datepicker.regional['en-GB'], dateOptionsDOB));
    

解答方法

は必要ありません。 date バリデーターを使用します。それは は、dd/mm/yyyy形式をサポートしていません。 そのため、2014年1月13日のような入力に対して、「有効な日付を入力してください」というメッセージが表示されます。すでに dateITA バリデータでは、dd/mm/yyyy 形式が使用されます。

と同じように date バリデーターは dateGreaterThan と {コード コール {コード を入力文字列に使用すると、日付のパースで同じ問題が発生します。このような関数を使って、日付をパースすることができます。

dateLessThan