用于多个日期模式的Javascript日期验证程序

用于多个日期模式的Javascript日期验证程序,javascript,Javascript,在stackoverflow的帮助下,我制作了一个.js文件,其中有两种方法可以检查输入的日期是否有效。它工作正常,但只有在日期输入为破折号-2019年12月12日的情况下。在isValidDate方法中,我可以采取什么方法使其能够处理多个日期模式,如-12.12.2020 12-12-2020等。我唯一的想法是先检查模式是什么,然后创建一个单独的大小写,将日期字符串按不同的字符拆分,但看起来很难看 function isValidDate(dateString) { var validDate

在stackoverflow的帮助下,我制作了一个.js文件,其中有两种方法可以检查输入的日期是否有效。它工作正常,但只有在日期输入为破折号-2019年12月12日的情况下。在isValidDate方法中,我可以采取什么方法使其能够处理多个日期模式,如-12.12.2020 12-12-2020等。我唯一的想法是先检查模式是什么,然后创建一个单独的大小写,将日期字符串按不同的字符拆分,但看起来很难看

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代码,我想练习它。这至少有帮助吗?看起来很棒,我会尝试一下!