我有一个MVC日期字段,我尝试验证mm/dd/yyyy
格式。我不希望用户输入1,2或3位数的年份。而且,我想确保输入有效日期。这是我正在使用的代码:
<script type="text/javascript">
$(function () {
$('.datepicker').datepicker();
ForceDatePickerFormat();
});
function ForceDatePickerFormat() {
$(".datepicker").on("blur", function (e) {
var date, day, month, newYear, value, year;
value = e.target.value;
if (value.search(/(.*)\/(.*)\/(.*)/) !== -1) {
date = e.target.value.split("/");
month = date[0];
day = date[1];
year = date[2];
if (year === "") {
year = "0";
}
if (year.length < 4) {
alert ("Date year must by 4 digits");
}
}
});
}
</script>
我使用&#34;模糊&#34;因为&#34; keyup&#34;当用户试图改变它时,引起了一个奇怪的问题。 &#34;模糊&#34;是好的,除非用户必须点击让日历消失,标签不起作用,点击日期不起作用。如果用户点击返回,则接受日期而不进行验证。我需要允许用户手动输入日期,因为他们经常在将来输入日期。有没有人有任何关于如何调整这个的建议,以便点击日期关闭日历,选项卡关闭日历,日期仍然有效?
答案 0 :(得分:1)
这是您需要的代码段。您需要将日期传递给下面的函数,如果给定日期有效/无效
,则返回true / falsefunction validateDate(dateValue)
{
var selectedDate = dateValue;
if(selectedDate == '')
return false;
var regExp = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/; //Declare Regex
var dateArray = selectedDate.match(regExp); // is format OK?
if (dateArray == null){
return false;
}
month = dateArray[1];
day= dateArray[3];
year = dateArray[5];
if (month < 1 || month > 12){
return false;
}else if (day < 1 || day> 31){
return false;
}else if ((month==4 || month==6 || month==9 || month==11) && day ==31){
return false;
}else if (month == 2){
var isLeapYear = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
if (day> 29 || (day ==29 && !isLeapYear)){
return false
}
}
return true;
}
以上功能将:
有关详情,请浏览以下链接:http://www.j2eekart.com/2015/01/date-validation-in-javascript.html
将您的代码更改为:
<script type="text/javascript">
$(document).ready(function(){
$('.datepicker').datepicker();
$(".datepicker").on("blur", function (e){
var isValidDate = validateDate(e.target.value);
if(!isValidDate){
alert("Please enter a valid date in MM/DD/YYYY format");
}
});
});
function validateDate(dateValue)
{
var selectedDate = dateValue;
if(selectedDate == '')
return false;
var regExp = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/; //Declare Regex
var dateArray = selectedDate.match(regExp); // is format OK?
if (dateArray == null){
return false;
}
month = dateArray[1];
day= dateArray[3];
year = dateArray[5];
if (month < 1 || month > 12){
return false;
}else if (day < 1 || day> 31){
return false;
}else if ((month==4 || month==6 || month==9 || month==11) && day ==31){
return false;
}else if (month == 2){
var isLeapYear = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
if (day> 29 || (day ==29 && !isLeapYear)){
return false
}
}
return true;
}
</script>