正则表达式日期验证格式

Posted

技术标签:

【中文标题】正则表达式日期验证格式【英文标题】:Regex Date Validation Format 【发布时间】:2014-03-22 09:44:14 【问题描述】:

谁能帮助我如何将这个 jquery 验证的日期格式从 YYYY-MM-DD 更改为 MM/DD/YYYY。

例子:

2014-02-21 must be 02/21/2014

我试图改变这个:new RegExp(/^(\d4)[\/\-\.](0?[1-9]|1[012])[\/\-\.](0?[1-9]|[12][0-9]|3[01])$/);

收件人:new RegExp(/^((0?[13578]|10|12)(-|\/)(([1-9])|(0[1-9])|([12])([0-9]?)|(3[01]?))(-|\/)((19)([2-9])(\d1)|(20)([01])(\d1)|([8901])(\d1))|(0?[2469]|11)(-|\/)(([1-9])|(0[1-9])|([12])([0-9]?)|(3[0]?))(-|\/)((19)([2-9])(\d1)|(20)([01])(\d1)|([8901])(\d1)))$/);

但我仍然无法获得我想要的正确验证..

代码如下:

            "date": 
                //  Check if date is valid by leap year
        "func": function (field) 
                var pattern = new RegExp(/^(\d4)[\/\-\.](0?[1-9]|1[012])[\/\-\.](0?[1-9]|[12][0-9]|3[01])$/); //<---- The Original Pattern of YYYY-MM-DD
                var match = pattern.exec(field.val());
                if (match == null)
                   return false;

                var year = match[1];
                var month = match[2]*1;
                var day = match[3]*1;
                var date = new Date(year, month - 1, day); // because months starts from 0.

                return (date.getFullYear() == year && date.getMonth() == (month - 1) && date.getDate() == day);
            ,
         "alertText": "* Invalid date, must be in YYYY-MM-DD format"
            

请帮帮我..谢谢.. :)

【问题讨论】:

为什么人们认为正则表达式是验证日期的最佳方式?只需将其拆分为数字,然后测试范围即可。 先生,我只是个初学者。我只想知道如何从基础更改格式。谢谢 【参考方案1】:

我觉得你应该试试这个。

var pattern = new RegExp(/^\d4-((0\d)|(1[012]))-(([012]\d)|3[01])$/);

但这不会检查一个月中的日子,例如 2 月 31 日。但使用 RegEx 来做这件事会很长。

【讨论】:

还是不行,我觉得有些代码需要改一下 var year = match[1];变月=匹配[2]*1; var day = match[3]*1; var date = new Date(year, month - 1, day); // 因为月份从 0 开始。 return (date.getFullYear() == year && date.getMonth() == (month - 1) && date.getDate() == day); 为什么月份是从0开始的?【参考方案2】:

(0?[1-9]|1[012])

(0?[1-9]|[12][0-9]|3[01])

(19|20)?[0-9]2

缺陷:

将匹配 2 月 29 日至 31 日、12 月 31 日等。

【讨论】:

【参考方案3】:

试试下面的正则表达式

请注意,它只检查未检查的格式是不是闰年

function validateDate(testDate)    

    var date_regex = /^(0[1-9]|1[0-2])\/(0[1-9]|1\d|2\d|3[01])\/(19|20)\d2$/ ;
    return date_regex.test(testDate);

        

【讨论】:

以上是关于正则表达式日期验证格式的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式日期验证格式

dd/mm/yyyy 格式的日期正则表达式,用于 javascript 验证

正则表达式波斯日期验证

Js 自定义日期格式的正则表达式验证

验证日期格式正则表达式

用于验证日期时间格式的正则表达式(MM/DD/YYYY)[重复]