如何使用剑道验证器验证日期格式为 yyyy-MM-dd?

Posted

技术标签:

【中文标题】如何使用剑道验证器验证日期格式为 yyyy-MM-dd?【英文标题】:How to validate a date is in the format yyyy-MM-dd using kendo validator? 【发布时间】:2012-12-17 03:07:43 【问题描述】:

我有一个剑道日期选择器,结构如下:

$("#date").kendoDatePicker(
    format: "yyyy-MM-dd",
    footer: " ",
    parseFormats: ["MM/dd/yyyy", "dd/MM/yyyy"]
  );

我想使用 kendo 验证器来验证日期是否包含格式为 yyyy-MM-dd 的有效日期。我试过这个:

<input type="date" id="date" placeholder="yyyy-mm-dd" name="date" required data-required-msg="Please enter a date." data-date-msg="Please enter a valid date."/>

虽然验证器确实正确验证了“必需”条件,但它似乎并没有验证日期的格式是否正确或是否有效。例如,“abc”作为有效日期传递,2013-18-85 也是如此。如何使用验证器确保格式正确的有效日期?

【问题讨论】:

【参考方案1】:

如果你想validate 一个date 你需要定义一个规则(没有内置规则)。

尝试定义:

$("#date").kendoValidator(
    rules: 
        date: function (input) 
            var d = kendo.parseDate(input.val(), "yyyy-MM-dd");
            return d instanceof Date;
        
    
);

注意:请记住,KendoUI 首先使用parseFormats 选项解析日期,然后将其转换为format 选项,最后运行验证。这就是为什么我在验证中使用yyyy-MM-dd 而不是["MM/dd/yyyy", "dd/MM/yyyy"]

【讨论】:

这对我有帮助。我不清楚(如果我理解正确的话)解析格式不是验证格式。 很好的解决方案:就我而言,格式可以动态更改,所以我需要动态验证: var datepicker = $("#" + input[0].id).data("kendoDatePicker "); var format = datepicker.options.format;var inputDate = kendo.parseDate(input.val(), format); @ThallesNoce 该解决方案也应该适用于您,因为这是一个动态验证:该函数在日期发生变化时运行。您唯一需要做的就是通过每次验证函数运行时检索格式的局部变量来更改文字“yyyy-MM-dd”;或存储格式并在其更改时计算的全局变量。 嘿@OnaBai,我后来想通了。我的问题是格式不太好的 knockoutjs datepicker 适配。它每次都在改变我的可观察变量格式,不应该。谢谢一百万!【参考方案2】:

答案是:

<script src="@Url.Content("~/Scripts/kendo/2015.2.805/kendo.aspnetmvc.min.js")"></script>
<script type="text/javascript">
    kendo.ui.validator.rules.mvcdate = function (input) 
        //use the custom date format here
        //kendo.parseDate - http://docs.telerik.com/kendo-ui/api/javascript/kendo#methods-parseDate
        return !input.is("[data-val-date]") || input.val() === "" || kendo.parseDate(input.val(), "@(MvcApplication.AppCulture.DateTimeFormat.ShortDatePattern)") !== null;
    ;
</script>

这里有更多信息:http://docs.telerik.com/kendo-ui/aspnet-mvc/validation

干杯

【讨论】:

这个答案也很好,因为它强调了检查 ["data-val-date"] 的必要性 - 如果没有这个,所有其他验证都会失败!

以上是关于如何使用剑道验证器验证日期格式为 yyyy-MM-dd?的主要内容,如果未能解决你的问题,请参考以下文章

剑道 jQuery 电子表格日期值保存

如何使用剑道验证器验证多封电子邮件?

使用Java如何验证所以日期是不是正确

开始日期结束日期验证 -Jquery/javascript - kendoUI

从日期时间列中提取 YYYY-MM

常用正则表达式