jQuery验证引擎,按dd/mm/yyyy格式的过去和未来日期验证

jQuery验证引擎,按dd/mm/yyyy格式的过去和未来日期验证,jquery,validation,date,jquery-validation-engine,Jquery,Validation,Date,Jquery Validation Engine,我是jQuery新手。我使用的是jQuery版本1.8.3。在我的ASP.NET Web应用程序中,我使用jQuery验证引擎来验证日期。我正在动态创建HTML文本输入,它允许用户仅以dd/mm/yyyy格式输入日期,在这里我将过去和将来的验证程序分配给texbox。我想通过使用过去和将来的验证器来验证dd/mm/yyyy格式的日期,这样用户就应该只允许输入给定给过去和将来的值之间的日期。若用户输入的日期超出了给定的限制,它也应该以dd/mm/yyyy格式在消息中显示日期 但是发生的事情是;仅当

我是jQuery新手。我使用的是jQuery版本1.8.3。在我的ASP.NET Web应用程序中,我使用jQuery验证引擎来验证日期。我正在动态创建HTML文本输入,它允许用户仅以dd/mm/yyyy格式输入日期,在这里我将过去和将来的验证程序分配给texbox。我想通过使用过去和将来的验证器来验证dd/mm/yyyy格式的日期,这样用户就应该只允许输入给定给过去和将来的值之间的日期。若用户输入的日期超出了给定的限制,它也应该以dd/mm/yyyy格式在消息中显示日期

但是发生的事情是;仅当我以yyyy-mm-dd格式传递日期并且我必须以yyyy-mm-dd格式在文本框中输入日期时,过去和未来日期验证程序才会进行验证

欢迎大家发表意见

到目前为止,我所做的尝试如下:

HtmlGenericControl l_oHGC = new HtmlGenericControl("div");
divCustomFields.Controls.Add(l_oHGC);
TextBox l_oTXT = new TextBox();
l_oHGC.Controls.Add(l_oTXT);
l_oTXT.Text = Convert.ToDateTime("Apr 16 2014 12:00AM").ToString(gc.APP_DATEFORMAT_DD_MM_YYYY);
l_oTXT.MaxLength = 10;
l_oTXT.CssClass = "calender validate[custom[date],past[" + Convert.ToDateTime("Dec 31 2050 12:00AM").ToString(gc.APP_DATEFORMAT_DD_MM_YYYY) + "],future[" + Convert.ToDateTime("Apr 26 2014 12:00AM").ToString(gc.APP_DATEFORMAT_DD_MM_YYYY) + "]]";
在jquery.validationEngine-en.js中,我做了以下更改

 "past": {
    "regex": /^(0?[1-9]|[12][0-9]|3[01])[\/\-](0?[1-9]|1[012])[\/\-]\d{4}$/,
                "alertText": "* Date prior to "
        },
  "future": {
     "regex": /^(0?[1-9]|[12][0-9]|3[01])[\/\-](0?[1-9]|1[012])[\/\-]\d{4}$/,
                "alertText": "* Date past "
        },  
    "date": {
       "regex": /^(0?[1-9]|[12][0-9]|3[01])[\/\-](0?[1-9]|1[012])[\/\-]\d{4}$/,
                "alertText": "* Invalid date, must be in DD/MM/YYYY format"
       },  

简短的回答是:当以自定义格式指定日期时,您不能执行
过去的
未来的
验证。
开箱即用,它只支持ISO格式的日期(YYYY-MM-DD或YYYY/MM/DD)

坏消息是语言文件(
jquery.validationEngine en.js
)中的更改不会影响这些验证的解析日期

原因是ISO格式是通过以下方法进行硬编码的
jquery.validationEngine.js

/**
* Parses an ISO date
* @param {String} d
*/
_parseDate: function(d) {

    var dateParts = d.split("-");
    if(dateParts==d)
        dateParts = d.split("/");
    if(dateParts==d) {
        dateParts = d.split(".");
        return new Date(dateParts[2], (dateParts[1] - 1), dateParts[0]);
    }
    return new Date(dateParts[0], (dateParts[1] - 1) ,dateParts[2]);
},
因此,您必须使用
YYYY/MM/DD
格式而不是所需的
DD/MM/YYYY
,或者编写自己的解析方法而不是
\u parseDate
,以满足您的需要


如果您更喜欢第二种方式,下面是坏消息2:没有扩展点可用于通过您自己的JS覆盖此行为。因此,您需要直接编辑
jquery.validationEngine.js
,并确保在将来更新
jquery.validationEngine
插件时不会覆盖您的更改。

@Rahul:我的回答有用吗?如果是这样,请随意接受/投票或提供一些反馈。否则,该线程对于其他读者来说就显得废弃和无用了。非常感谢。你不能用这个来代替吗?