【问题标题】:jQuery Validation Engine : Change Regex for Date Format dd-M-yyjQuery 验证引擎:更改日期格式的正则表达式 dd-M-yy
【发布时间】:2014-11-26 09:28:16
【问题描述】:

验证日期格式的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 pattern = new RegExp(/([12]\d|0[1-9]|3[0-1])-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-\d{4}/);
                    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 year = match;
                    var month = match[2];
                    var day = match[3];

                    var date = new Date(day, month - 1, year); // 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"
                },

在这里,正则表达式已更改为使用 dd-M-yy 格式。正则表达式有效,但当 datepicker 输入为 true 时仍显示验证错误。

如何将日期格式设为dd-M-yy,即26-Nov-2014,如果格式正确,它不会提供验证?

谢谢。

【问题讨论】:

  • 在您希望 dd-M-yy 有效但在您的alertText 中显示格式为YYY-MM-DD 的消息...
  • @VDesign,问题已更新。只有当它与正则表达式不匹配时才会出现验证错误。
  • 你能用你的代码创建一个 jsfiddle,这样我们就可以测试一下看看出了什么问题?
  • 这描述了所有 - http://stackoverflow.com/questions/27142916/jquery-validation-engine-change-date-format

标签: javascript jquery regex validation


【解决方案1】:

试试这个

var pattern = new RegExp(/([12]\d|0[1-9]|3[0-1])-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\d{4})/);
var match = pattern.exec(field.val());
if (match == null)
 return false;

var months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
var year = match[3];
var month = match[2];
var day = match[1];

var date = new Date(day, month - 1, year); // because months starts from 0.
return (date.getFullYear() == year && date.getMonth() == months.indexOf(month) && date.getDate() == day);

http://jsfiddle.net/mw56tnej/12/

【讨论】:

  • 它仍然显示验证错误。 Datepicker 输入是$(function(){ $( "#task_start_date").datepicker({ dateFormat: 'dd-M-yy' });,类是class="form-control validate[required,custom[date]]"
  • 你能用你的代码创建一个 jsfiddle 吗?我使用 pattern.exec("26-Nov-2014"),它返回 ["26-Nov-2014", "26", "Nov", "2014"]。
  • 是的,代码看起来是正确的,但无法弄清楚为什么即使在预期的输入上它仍然给出验证。
  • 也许你应该创建一个jsfiddle,我真的不知道出了什么问题。谢谢。
  • var isOk = (date.getFullYear() == year && date.getMonth() == months.indexOf(month) && date.getDate() == day); alert(isOk); 给我false
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-24
  • 2010-11-21
  • 1970-01-01
  • 1970-01-01
  • 2012-07-12
相关资源
最近更新 更多