首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MMM dd yyyy验证正则表达式?

MMM dd yyyy验证正则表达式?
EN

Stack Overflow用户
提问于 2012-03-02 18:51:37
回答 4查看 5.1K关注 0票数 0

我需要一个正则表达式来验证MMM dd yyyy格式的日期(包括闰年)

我发现了一个正则表达式,但目前它在每个闰年的2月29号出现错误

代码语言:javascript
复制
^(?:(((January|March|May|July|August|October|December) 31)|((January|March|April|May|June|July|August|September|October|November|December) (([0-2]\\d)|30))|(February ([01]\\d|2[0-8])))|(February 29(?=-((1[6-9]|[2-9]\\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))) ((1[6-9]|[2-9]\\d)\\d{2})$

请帮我修一下。

提前感谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-03-02 19:34:20

下面是一个检查日期字符串有效性的函数,同时考虑到格式:

代码语言:javascript
复制
function chkdate(datestr,formatstr){
    if (!(datestr && formatstr)) {return false;}
    var splitter = formatstr.match(/\-|\/|\s/) || ['-']
       ,df = formatstr.split(splitter[0])
       ,ds = datestr.split(splitter[0])
       ,ymd =[0,0,0]
       ,dat;
    for (var i=0;i<df.length;i++){
            if (/yyyy/i.test(df[i])) {ymd[0] = ds[i];}
       else if (/mm/i.test(df[i])) {ymd[1] = ds[i];}
       else if (/dd/i.test(df[i])) {ymd[2] = ds[i];}
    }
    dat = new Date(ymd.join('/'));
    return !isNaN(dat) && Number(ymd[1])<=12  && dat.getDate()===Number(ymd[2]);
}
//usage (in your case)
var months = {january:1,february:2,march:3,april:4,may:5,
              june:6,july:7,august:8,september:9,october:10,
              november:11,december:12},
inputdateraw  =  'february 29 2011'.split(' '),
inputdate = [months[inputdateraw[0]],
             inputdateraw[1],
             inputdateraw[2]].join(' ');
console.log(chkdate (inputdate, 'mm dd yyyy')); //=> false

另请参阅this SO-question

票数 2
EN

Stack Overflow用户

发布于 2015-04-16 22:52:09

您是否可以尝试使用下面的代码:

代码语言:javascript
复制
"^(?:(((Jan(uary)?|Ma(r(ch)?|y)|Jul(y)?|Aug(ust)?|Oct(ober)?|Dec(ember)?)\\ 31)|((Jan(uary)?|Ma(r(ch)?|y)|Apr(il)?|Ju((ly?)|(ne?))|Aug(ust)?|Oct(ober)?|Sep(tember)?|(Nov|Dec)(ember)?)\\ (0?[1-9]|([12]\\d)|30))|(Feb(ruary)?\\ (0?[1-9]|1\\d|2[0-8]|(29(?=,\\ ((1[6-9]|[2-9]\\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)))))))\\,\\ ((1[6-9]|[2-9]\\d)\\d{2}))"
票数 2
EN

Stack Overflow用户

发布于 2012-03-02 19:09:33

如果你使用的是jquery,那么你可以使用它附带的date picker

或者你可以使用验证插件。您可以使用addMethod函数对其进行自定义。

代码语言:javascript
复制
$.validator.addMethod(
    "australianDate",
    function(value, element) {
        // put your own logic here, this is just a (crappy) example
        return value.match(/^\d\d?\/\d\d?\/\d\d\d\d$/);
    },
    "Please enter a date in the format dd/mm/yyyy"
);

然后在你的表单上:

代码语言:javascript
复制
$('#myForm')
    .validate({
        rules :
            myDate : {
                australianDate : true
            }
    });

请参阅here

还有一个javascript日期库- Datejs

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9532055

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档