我有一个 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>
我使用了“blur”,因为当用户尝试更改它时,“keyup”在年份中引起了一个奇怪的问题。 “模糊”很好,只是用户必须单击才能使日历消失,选项卡不起作用,并且单击日期不起作用。如果用户按回车键,则它会接受该日期而不进行验证。我需要允许用户手动输入日期,因为他们经常输入 future 的日期。有没有人对如何调整此设置有任何建议,以便单击日期关闭日历,选项卡关闭日历,并且日期仍然有效?
最佳答案
这是您需要的代码片段。您只需将日期传递给下面的函数,如果给定日期有效/无效,该函数将返回 true/false
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;
}
上述函数将:
- 检查日期格式是否正确(MM/DD/YYYY)。
- 检查给定日期是否有效。例如:四月只有 30 天。如果我们将 4 月的日期指定为 31,则此函数会将其验证为无效日期。
- 检查 2 月 29 日。仅当指定年份是闰年时,它才会被验证为有效日期。
欲了解更多信息,请访问链接: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>
关于javascript - 在 JavaScript 中验证日期为 mm/dd/yyyy 格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33360233/