【问题标题】:jQuery Validation engine, past and future date validation by dd/mm/yyyy formatjQuery 验证引擎,通过 dd/mm/yyyy 格式验证过去和未来的日期
【发布时间】:2014-04-30 06:45:09
【问题描述】:

我是 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"
       },  

【问题讨论】:

    标签: jquery validation date jquery-validation-engine


    【解决方案1】:

    简短的回答是:当日期以自定义格式指定时,您不能进行 pastfuture 验证。 开箱即用,它仅支持 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 或编写自己的解析方法而不是 _parseDate 以满足您的需求。

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

    【讨论】:

    • @Rahul:我的回答有帮助吗?如果是这样,请随时接受/投票或提供一些反馈。否则,对于其他读者来说,这个线程看起来已经被遗弃和无用了。谢谢!
    • 你不能用funcCall代替custom吗?
    猜你喜欢
    • 2014-01-18
    • 1970-01-01
    • 2017-04-07
    • 2022-11-29
    • 2011-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-06
    相关资源
    最近更新 更多