【发布时间】:2015-11-02 01:54:57
【问题描述】:
谁能告诉我这段代码有什么问题?当允许用户输入时,我正在尝试将 datepicker 日期上的日期验证为 mm/dd/yyyy。我使用了向我建议的验证代码,并在其中添加了一些其他代码,以确保当他们按下鼠标或按下 Tab 键时弹出日历消失(如果他们根本没有输入日期)。
$(function () {
$('.datepicker2').datepicker()
.on('changeDate', function (ev) {
$('.datepicker2').datepicker('hide');
});
ForceDatePickerFormat();
});
function ForceDatePickerFormat(dateValue) {
$('.datepicker2').on('keydown', function (e) {
var keyCode = e.keyCode || e.which;
if (keyCode == 9) {
$('.datepicker2').datepicker('hide');
}
});
$(".datepicker2").on("blur", function (e) {
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;
});
}
【问题讨论】:
-
你用的是什么日期选择器插件?为什么不只使用客户端验证?
-
我正在使用 bootstrap-datepicker.js。我对 asp.net 很陌生...我在模型中使用 DataFormatString = "{0:MM/dd/yyyy},但客户希望强制用户输入 4 位数年份。还有哪些其他选项?客户端验证具体是什么意思?我尝试了正则表达式,但找不到有效的字符串。另外,客户想要下拉日历。欢迎任何帮助!
-
如果您绑定到的属性是
DateTime,并且您启用了客户端验证(包括jquery.validate.js和jquery.validate.unobtrusive.js)并包括@Html.ValidationMessageFor(m => m.yourDateProperty),那么所有这些都是开箱即用的(你不需要这些) -
所以,在模型中,我目前有这样的东西: [DisplayName("Need Date")] [DataType(DataType.DateTime, ErrorMessage = "Date not valid.")] [DisplayFormat( DataFormatString = "{0:d}", ApplyFormatInEditMode = true)] public Nullable
Need_Date { get;放;我是否保留这个,并将 ValidateMessageFor 放在视图中? -
所以,检查一下,我已经设置好了。问题是,它仍然允许用户输入 2 位数的年份。而且,它默认为 1915 年。我们必须强制使用 4 位数的年份,因为用户在未来输入日期......它并不总是 2000 年代。其他一切都由客户端验证处理。
标签: jquery asp.net asp.net-mvc date datepicker