2016-11-09 47 views
0

我使用jQuery validate插件和maskedInput插件爲輸入做了自定義日期和時間驗證。如何防止dateTime驗證中的未來一年?

有沒有辦法在自定義驗證中進行驗證,以防止進入比當年更大的一年?

我的代碼:

$("#date").mask("99/99/9999 99:99", { 
 
    placeholder: "mm/dd/yyyy hh:mm" 
 
}); 
 
$.validator.addMethod("dateTime", function(value, element) { 
 
    var stamp = value.split(" "); 
 
    var validDate = !/Invalid|NaN/.test(new Date(stamp[0]).toString()); 
 
    var validTime = /^(([0-1]?[0-9])|([2][0-3])):([0-5]?[0-9])(:([0-5]?[0-9]))?$/i.test(stamp[1]); 
 
    return this.optional(element) || (validDate && validTime); 
 
}, "Invalid datetime."); 
 

 
$('#form').validate({ 
 
    rules: { 
 
    date: { 
 
     required: true, 
 
     dateTime: true 
 
    } 
 
    }, 
 
    messages: { 
 
    date: { 
 
     required: "" 
 
    } 
 
    } 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.maskedinput/1.4.1/jquery.maskedinput.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.15.1/jquery.validate.min.js"></script> 
 

 
<form action='' method='post' id='form'> 
 
    <input type='text' name='date' value='' id='date' placeholder='mm/dd/yyyy hh:mm'> 
 
</form>

回答

1

添加一個新的方法來檢查一年

jQuery.validator.addMethod("minYear", function (value, element) { 
    var year = new Date(value).getFullYear(); 
    var curentYear = new Date().getFullYear(); 
    return this.optional(element) || year <= curentYear; 
}, 'Year can not be greater than current year'); 

添加相同的驗證規則

$('#form').validate({ 
    rules: { 
    date: { 
     required: true, 
     dateTime: true, 
     minYear: true 
    } 
    }, 
    messages: { 
    date: { 
     required: "" 
    } 
    } 
}) 
+0

謝謝。我修改了一下你的代碼。而不是'myDate'應該是'year',並添加了錯誤消息,並且它可以工作。直到現在,我甚至都不知道可以添加多個自定義方法。 – Ionut

+0

@Ionut Gald它幫助。我修正了這個錯字。 –

1

可以使用addMethod這樣創建您自己的方法:

jQuery.validator.addMethod("minDate", function (value, element) { 
    var now = new Date().getFullYear(); 
    var myDate = new Date(value).getFullYear(); 
    return this.optional(element) || myDate < now; 
}); 

$('#form').validate({ 
    rules: { 
     date: { 
     required: true, 
     dateTime: true, 
     minDate: true 
     } 
    }, 
    messages: { 
     date: { 
     minDate: "The date(year) must not be in the future" 
     } 
    } 
}) 

希望這有助於!

+0

我已經有一個返回true或false的方法,在這裏我爲整個驗證約會時間。這對我的情況如何工作? – Ionut

+0

在Date()方法前添加'.getFullYear()'方法在 –

相關問題