用于多个日期模式的Javascript日期验证程序
在stackoverflow的帮助下,我制作了一个.js文件,其中有两种方法可以检查输入的日期是否有效。它工作正常,但只有在日期输入为破折号-2019年12月12日的情况下。在isValidDate方法中,我可以采取什么方法使其能够处理多个日期模式,如-12.12.2020 12-12-2020等。我唯一的想法是先检查模式是什么,然后创建一个单独的大小写,将日期字符串按不同的字符拆分,但看起来很难看用于多个日期模式的Javascript日期验证程序,javascript,Javascript,在stackoverflow的帮助下,我制作了一个.js文件,其中有两种方法可以检查输入的日期是否有效。它工作正常,但只有在日期输入为破折号-2019年12月12日的情况下。在isValidDate方法中,我可以采取什么方法使其能够处理多个日期模式,如-12.12.2020 12-12-2020等。我唯一的想法是先检查模式是什么,然后创建一个单独的大小写,将日期字符串按不同的字符拆分,但看起来很难看 function isValidDate(dateString) { var validDate
function isValidDate(dateString) {
var validDate = true;
// First check for the pattern
if (!/^\d{1,2}\/\d{1,2}\/\d{4}$/.test(dateString)) {
return false;
}
// Parse the date parts to integers
var parts = dateString.split("/");
var day = parseInt(parts[0], 10);
var month = parseInt(parts[1], 10);
var year = parseInt(parts[2], 10);
if(isNaN(day) || isNaN(month) || isNaN(year)){
return false;
}
// Check the ranges of month and year
if (year < 1000 || year > 3000 || month < 1 || month > 12) {
return false;
}
var monthLength = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
// Adjust for leap years
if (year % 400 == 0 || (year % 100 != 0 && year % 4 == 0)) {
monthLength[1] = 29;
}
// Check the range of the day
if (!(day > 0 && day <= monthLength[month - 1])) {
return false;
}
return true;
};
/**
* Function which executes each time the input loses focus (onblur)
*/
function validateDate() {
// Get a reference to the container
var container = document.querySelector('.date');
// Clear stale error/success messages
container.className = container.className.replace('success', '');
container.className = container.className.replace('error', '');
// Get current value of input
var dateString = document.getElementById("Start-date").value;
// Test if the string is a valid date
var isValid = isValidDate(dateString);
// Update classess of container to show success/error
if (!isValid) {
container.className += ' error';
} else {
container.className += ' success';
}
}
函数isValidDate(日期字符串){
var validDate=真;
//首先检查模式
if(!/^\d{1,2}\/\d{1,2}\/\d{4}$/.test(日期字符串)){
返回false;
}
//将日期部分解析为整数
var parts=dateString.split(“/”);
var-day=parseInt(部分[0],10);
var月=parseInt(第[1]部分,第10节);
var year=parseInt(第[2]部分,第10节);
如果(isNaN(日)| isNaN(月)| isNaN(年)){
返回false;
}
//检查月份和年份的范围
如果(年<1000 |年>3000 |月<1 |月>12){
返回false;
}
var monthLength=[31,28,31,30,31,30,31,31,30,31,31];
//调整闰年
如果(年份%400==0 | |(年份%100!=0和年份%4==0)){
月长[1]=29;
}
//检查一天的活动范围
如果(!(day>0&&day请注意,我没有测试正则表达式,这只是如何解决这个问题的一个示例
//首先检查模式var=dateChar
if (!/^\d{1,2}\/\d{1,2}\/\d{4}$/.test(dateString)) {
dateChar = '/';
}
if (!/^\d{1,2}\-\d{1,2}\-\d{4}$/.test(dateString)) {
dateChar = '-';
}
if (!dateChar) {
return false;
}
var parts = dateString.split(dateChar);
一个正则表达式可以允许使用多个模式。也许这可以帮助您如何获取日期输入?@ScottMarcus谢谢-好的,我会做我的工作,并尝试弄清楚如何使用正则表达式,因为我不知道正则表达式,但是用“/”分割怎么样part?@GeorgeBailey我将日期输入作为文本字段中的字符串。我知道有一个输入类型=date可能更方便,但这是我的第一个javascript代码,我想练习它。这至少有帮助吗?看起来很棒,我会尝试一下!