【问题标题】:jQuery Validation Engine : Change Date FormatjQuery 验证引擎:更改日期格式
【发布时间】:2015-01-24 09:54:39
【问题描述】:

我的日期选择器代码

$(function(){ 

         $( "#task_start_date").datepicker({
         dateFormat: 'dd-M-yy',
         showOn: 'button',
         buttonImage :image_us,
         buttonImageOnly: true
        });
});

HTML 输入:

<input type="text" class="form-control validate[required,custom[date]]" name="task_start_date" id="task_start_date" />

正确日期输入验证的 JS 函数:

"date": {                    
                    //  Check if date is valid by leap year
            "func": function (field) {
                    var pattern = new RegExp(/^(\d{4})[\/\-\.](0?[1-9]|1[012])[\/\-\.](0?[1-9]|[12][0-9]|3[01])$/);
                    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"
                },

这里regex 需要YYYY-MM-DD (2014-11-26) 格式,但我们使用的是dd-M-yy(01-MAR-12) 格式。

正则表达式尝试:

/^(0?[1-9]|[12][0-9]|3[01])[\/\-](0?[1-9]|1[012])[\/\-]\d{4}$/

上述regex 无效。如何更改 regex 以匹配预期的日期选择器输出。插入 DB 的值是 01-MAR-12 而不是 2014-11-26

谢谢。

【问题讨论】:

    标签: javascript jquery regex date datepicker


    【解决方案1】:

    ^(0?[1-9]|[12][0-9]|3[01])[-][A-Z]{3}[-]\d{2}$

    这应该可以解决问题。您尝试的正则表达式是 dd/mm/yyyy 或 dd-mm-yyyy 的格式。

    【讨论】:

    • 对于25-Nov-2014,它仍然显示验证。 * 无效日期,必须为YYYY-MM-DD 格式。 var pattern = new RegExp(/^(0?[1-9]|[12][0-9]|3[01])[-][A-Z]{3}[-]\d{2}$/);
    • 我想我误解了你的问题。我以为你想要一个正则表达式来匹配01-MAR-12 的格式,但是如果你想让它匹配25-Nov-2014,正确的正则表达式应该是^(0?[1-9]|[12][0-9]|3[01])[-][A-Za-z]{3}[-]\d{4}$ - 注意A-Z 之后添加的a-z[A-Za-z] 表示它将匹配大写字母和普通字符。如果您希望它只接受大写字母(如01-MAR-2014),您需要将[A-Za-z] 替换为[A-Z]Succesfully tested
    【解决方案2】:

    试试这个(未测试):

    (?:0[1-9]|1[0-9]|2[0-9]|3[01])-(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)-\d{2}
    
    • (?:0[1-9]|1[0-9]|2[0-9]|3[01]) :匹配 01 到 09、10 到 19、20 到 29、30 到 31。但是二月没有超过 29 的任何东西,所以你如何处理我们不是基于正则表达式的
    • - : 匹配hypen
    • (?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC) : 匹配月份
    • - : 匹配hypen
    • -\d{2} :匹配任意两位数,任意顺序

    你可以缩小正则表达式,但我现在没有时间。

    【讨论】:

      【解决方案3】:

      使用这个

      "date": {                    
        //	Check if date is valid by leap year
        "func": function (field) {
        var pattern = new RegExp(/^(0?[1-9]|[12][0-9]|3[01])[\/\-\.](0?[1-9]|1[012])[\/\-\.](\d{4})$/);
      	var match = pattern.exec(field.val());
      	if (match == null)
      	   return false;                     
      
      	var year = match[3];
      	var month = match[2]*1;
      	var day = match[1]*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 dd-mm-yyyy format"
      },

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-28
        • 1970-01-01
        • 2013-11-02
        相关资源
        最近更新 更多