Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 特定日期格式的正则表达式_Javascript_Jquery_Regex_Validation_Date - Fatal编程技术网

Javascript 特定日期格式的正则表达式

Javascript 特定日期格式的正则表达式,javascript,jquery,regex,validation,date,Javascript,Jquery,Regex,Validation,Date,我想要一个日期格式的正则表达式,例如:01-Jan-2011 我已经写了^[0-9]{1,2}-[a-zA-Z]{3}-[0-9]{4},但没有检查所有有效日期,如50-AAA-2011也将被视为有效 我在javascript中使用lib 我的代码 var sayDate = new LiveValidation('date'); sayDate.add( Validate.Format, { pattern: /^[0-9]{1,2}-[a-zA-Z]{3}-[0-9]{4}/i })

我想要一个日期格式的正则表达式,例如:01-Jan-2011

我已经写了
^[0-9]{1,2}-[a-zA-Z]{3}-[0-9]{4}
,但没有检查所有有效日期,如50-AAA-2011也将被视为有效

我在javascript中使用lib

我的代码

var sayDate = new LiveValidation('date');
    sayDate.add( Validate.Format, { pattern: /^[0-9]{1,2}-[a-zA-Z]{3}-[0-9]{4}/i });

请帮忙

很明显,如果只想验证1-12月,需要在正则表达式中指定它。然后你必须验证日期药水是否正确。然后看看这个日期是否对给定的月份或年份有效,还有很多其他情况。我相信正则表达式不是解决这个问题的方法。您是否尝试过使用类似于?的
Date.parse
很清楚,如果您只想验证Jan-Dec,则需要在正则表达式中指定它。然后你必须验证日期药水是否正确。然后看看这个日期是否对给定的月份或年份有效,还有很多其他情况。我相信正则表达式不是解决这个问题的方法。您是否尝试过使用日期解析之类的方法?

如何:

^(0?[1-9]|[1-2][0-9]|3[0-1])-(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)-[1-2][0-9]{3}$
这仍将允许2011年2月31日,因此要检查实际存在的日期,您可能需要使用除正则表达式之外的其他方法,如何:

^(0?[1-9]|[1-2][0-9]|3[0-1])-(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)-[1-2][0-9]{3}$

这仍将允许2011年2月31日,因此,要检查日期是否确实存在,您可能需要使用除正则表达式之外的其他方法。使用正则表达式验证日期格式实际上要比听起来复杂得多。您可以很容易地进行基本验证,但要使其完美,还需要做更多的工作

我建议改为使用日期选择器控件,它可以为您进行验证(还可以为您提供漂亮闪亮的用户界面功能),或者使用现有的Javascript库,它可以为您处理日期

对于日期选择器控件,有任意数量的jQuery选项。对于日期处理库,我建议查找


希望能有所帮助。

尝试使用正则表达式验证日期格式实际上比听起来要复杂得多。您可以很容易地进行基本验证,但要使其完美,还需要做更多的工作

我建议改为使用日期选择器控件,它可以为您进行验证(还可以为您提供漂亮闪亮的用户界面功能),或者使用现有的Javascript库,它可以为您处理日期

对于日期选择器控件,有任意数量的jQuery选项。对于日期处理库,我建议查找


希望有帮助。

您可以通过JavaScript验证日期的语法。可以使用对象检查语义,如下所示:

function ValidateCustomDate(d) {
    var match = /^(\d{1,2})-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\d{4})$/.exec(d);
    if (!match) {
        // pattern matching failed hence the date is syntactically incorrect
        return false;
    }
    var day = parseInt(match[1], 10); // radix (10) is required otherwise you will get unexpected results for 08 and 09
    var month = {
        Jan: 0,
        Feb: 1,
        Mar: 2,
        Apr: 3,
        May: 4,
        Jun: 5,
        Jul: 6,
        Aug: 7,
        Sep: 8,
        Oct: 9,
        Nov: 10,
        Dec: 11
    }[match[2]]; // there must be a shorter, simpler and cleaner way
    var year = parseInt(match[3], 10);
    var date = new Date(year, month, day);
    // now, Date() will happily accept invalid values and convert them to valid ones
    // 31-Apr-2011 becomes 1-May-2011 automatically
    // therefore you should compare input day-month-year with generated day-month-year
    return date.getDate() == day && date.getMonth() == month && date.getFullYear() == year;
}
console.log(ValidateCustomDate("1-Jan-2011"));  // true
console.log(ValidateCustomDate("01-Jan-2011")); // true
console.log(ValidateCustomDate("29-Feb-2011")); // false
console.log(ValidateCustomDate("29-Feb-2012")); // true
console.log(ValidateCustomDate("31-Mar-2011")); // true
console.log(ValidateCustomDate("31-Apr-2011")); // false

您可以通过JavaScript验证日期的语法。可以使用对象检查语义,如下所示:

function ValidateCustomDate(d) {
    var match = /^(\d{1,2})-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\d{4})$/.exec(d);
    if (!match) {
        // pattern matching failed hence the date is syntactically incorrect
        return false;
    }
    var day = parseInt(match[1], 10); // radix (10) is required otherwise you will get unexpected results for 08 and 09
    var month = {
        Jan: 0,
        Feb: 1,
        Mar: 2,
        Apr: 3,
        May: 4,
        Jun: 5,
        Jul: 6,
        Aug: 7,
        Sep: 8,
        Oct: 9,
        Nov: 10,
        Dec: 11
    }[match[2]]; // there must be a shorter, simpler and cleaner way
    var year = parseInt(match[3], 10);
    var date = new Date(year, month, day);
    // now, Date() will happily accept invalid values and convert them to valid ones
    // 31-Apr-2011 becomes 1-May-2011 automatically
    // therefore you should compare input day-month-year with generated day-month-year
    return date.getDate() == day && date.getMonth() == month && date.getFullYear() == year;
}
console.log(ValidateCustomDate("1-Jan-2011"));  // true
console.log(ValidateCustomDate("01-Jan-2011")); // true
console.log(ValidateCustomDate("29-Feb-2011")); // false
console.log(ValidateCustomDate("29-Feb-2012")); // true
console.log(ValidateCustomDate("31-Mar-2011")); // true
console.log(ValidateCustomDate("31-Apr-2011")); // false

使用regex验证格式是否正确是可以的,但是使用regex验证日期实际上是一个有效的日期(闰年、每月天数不同等等),而使用regex则是错误的。是否可能重复您希望执行的操作?你想赶上闰年吗?其他地区呢(
Oct
vs.
Okt
等)?@Tim:仅有效月份,二月不超过28@Abhishek:我发布了一个解决方案,该解决方案还可以检查月份的28天、30天、31天以及闰年的29天使用正则表达式验证格式是否正确,但使用正则表达式验证日期实际上是有效的(闰年、每月天数不同等)使用regex是错误的。你想走多远?你想赶上闰年吗?其他地区呢(
Oct
vs.
Okt
等)?@Tim:仅有效月份,2月不超过28@Abhishek:我发布了一个解决方案,该解决方案还可以检查月内28、30、31天+闰年内29天。您能给出任何片段或示例吗?对不起,阿披舍克,我没有使用上述任何一种方法使用JavaScript进行任何日期解析。不过,我会解析我的日期服务器side使用
DateTime.Parse
if.NET和其他语言中的类似语言。如果没有快速而肮脏的解决方案来检查一些基本的日期解析规则,我不推荐使用RegEx。你能给出一些片段或示例吗?对不起,阿披实,我没有用JavaScript对上述任何一种语言进行任何日期解析方法。但是,我会使用
DateTime.parse
if.NET和其他语言来解析我的日期服务器端。如果没有快速而肮脏的解决方案来检查一些基本的日期解析规则,我不推荐使用正则表达式。
var d1=date.parse(dateCut);dateCut=d1.toString('dd-MMM-yyyy')
解决了我的问题。谢谢
var d1=Date.parse(dateCut);dateCut=d1.toString('dd-MMM-yyyy');
解决了我的问题。谢谢