【问题标题】:Date Validation problems with JQuery .valid() methodJQuery .valid() 方法的日期验证问题
【发布时间】:2014-03-24 17:37:18
【问题描述】:

我正在尝试将 jquery 日期估值更改为 en-GB 文化,但没有成功。 例如,对于 2013 年 3 月 23 日,我想输入 23/03/2013 而不是 03/23/2013。

当我在表单上调用验证方法时,它返回 false。我没有收到来自 Kendo 的验证错误,只是来自 jquery 方法。

如何更改 jQuery 的文化设置?

<script src="@Url.Content("~/Scripts/Kendo/cultures/kendo.culture.en-GB.min.js")"></script>
<script>kendo.culture("en-GB");</script>
...
@(Html.Kendo().DatePickerFor(model => model.OrderDate).HtmlAttributes(new { style = "width:150px", required = "required"  }).Culture("en-GB").Format("dd/MM/yyyy"))
...
var isValid = $("#orderForm").valid();   // returns false if I select 23/3/2013

谢谢。

【问题讨论】:

    标签: c# jquery asp.net-mvc kendo-asp.net-mvc


    【解决方案1】:

    把它放在你的脚本中,然后从这里获取正则表达式:Regex to validate date format dd/mm/yyyy

    jQuery.validator.methods.date = function (value, element) {
                var dateRegex = /copyRegexHere/;
                return this.optional(element) || dateRegex.test(value);
            };
    

    【讨论】:

    • 我收到了 Regex 的“未捕获的 TypeError 异常”。我已经尝试了上面链接中的前两个正则表达式。
    • 你必须在 javascript 中把 / 放在它的末尾和开头。像这样/regex/
    • 我尝试了以下方法,但仍然出现类型错误异常:var dateRegex = '/(^(((0[1-9]|[12][0-8]) )[\/](0[1-9]|1[012]))|((29|30|31)[\/](0[13578]|1[02]))|((29|30 )[\/](0[4,6,9]|11)))[\/](19|[2-9][0-9])\d\d$)|(^29[\/ ]02[\/](19|[2-9][0-9])(00|04|08|12|16|20|24|28|32|36|40|44|48|52|56 |60|64|68|72|76|80|84|88|92|96)$)/';
    • 你不需要撇号,把它去掉。
    【解决方案2】:

    这是 WebKit 浏览器和 jQuery 验证的一个已知问题。它似乎已向some time ago 团队提出,但许多用户仍在报告问题。

    有几种方法可以调试和解决此问题。首先尝试覆盖 jQuery 验证,以确保这确实是您看到的问题:

    jQuery.validator.methods["date"] = function (value, element) { return true; }
    

    或者,通过查找函数破解jquery.validate.js

    date: function (value, element) 
    

    并插入类似这样的内容,取自this post(请注意 $.browser 现在已弃用,以下是为了说明一种可能的方法):

    if ($.browser.webkit) {
        var d = new Date();
        return this.optional(element) || !/Invalid|NaN/.test(new Date(d.toLocaleDateString(value)));
    }
    else {
        return this.optional(element) || !/Invalid|NaN/.test(new Date(value));
    }
    

    【讨论】:

    • 谢谢。但是我在所有常见的浏览器中都遇到了这个问题,而不仅仅是 WebKit 浏览器。
    猜你喜欢
    • 1970-01-01
    • 2012-11-28
    • 2021-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多