jQuery dd/MM/yyyy 日期格式验证

Posted

技术标签:

【中文标题】jQuery dd/MM/yyyy 日期格式验证【英文标题】:Jquery dd/MM/yyyy date format validation 【发布时间】:2014-01-18 02:50:07 【问题描述】:

我在我的应用程序中使用默认的 ASP.NET MVC 4 验证包。在视图中,我有一个格式为“dd/MM/yyyy”的日期字段,并且 jquery 验证无法验证格式。然后我添加了下面的代码来覆盖默认行为。

$(function () 
        $.validator.methods.date = function (value, element) 
            Globalize.culture("en-GB");
            // you can alternatively pass the culture to parseDate instead of
            // setting the culture above, like so:
           // parseDate(value, null, "en-AU")
            return this.optional(element) || Globalize.parseDate(value) !== null;
        
    );

然后日期验证问题得到解决,现在我的应用程序不会触发客户端验证,而是触发服务器端验证。这种行为的原因可能是什么?

【问题讨论】:

它肯定不会触发客户端验证,还是会在验证过程中产生 javascript 错误,从而无法将 POST 标记为无效,所以继续调用服务器? 【参考方案1】:

为我找到了一个更简单的解决方案: Clientside validation fails for date format dd/mm/yyyy in jQuery Validate

喜欢它,因为我不需要新的第三方脚本或任何额外的插件

基本上像这样覆盖验证方法:

$(document).ready(function () 
    $.validator.methods.date = function(value, element) 
        return this.optional(element) || parseDate(value, "dd-MM-yyyy") !== null;
    ;
);

【讨论】:

不确定 parseDate 来自哪里,但您可以使用 date.js 和这个 Date.parseExact(value, "d/M/yyyy") 代替它。但是 +1 让我走上正确的道路 以前是用jQuery.datepicker.parseDate【参考方案2】:

您可以通过其他方法使用 dateITA。

http://ajax.aspnetcdn.com/ajax/jquery.validate/1.13.0/additional-methods.js

$("#myform").validate(
    rules: 
        dateITA: true
    
)

我希望它有效。

【讨论】:

【参考方案3】:

缺少 globalize.js 文件。我修改了如下代码,现在可以正常工作了。

从https://github.com/jquery/globalize下载文件

包括对相关 .js 文件的引用(您也可以使用 NuGet 包安装它,这是我使用的选项。)

<script src="~/Scripts/globalize/globalize.js"></script>
<script src="~/Scripts/globalize/cultures/globalize.culture.en-GB.js"></script>

$(document).ready(function () 
        $.culture = Globalize.culture("en-GB");
        $.validator.methods.date = function (value, element) 
            //This is not ideal but Chrome passes dates through in ISO1901 format regardless of locale 
            //and despite displaying in the specified format.

            return this.optional(element)
                || Globalize.parseDate(value, "dd/MM/yyyy", "en-GB")
                || Globalize.parseDate(value, "yyyy-mm-dd");
        
    );

【讨论】:

【参考方案4】:

谢谢戴。不得不使用 date.js 库中类似的东西。见下文:

$.validator.methods.date = function(value, element)  
  return this.optional(element) || Date.parseExact(value, "dd-MM-yyyy"); 
;

【讨论】:

【参考方案5】:

您可以使用以下代码进行验证:

    jQuery.validator.addMethod("validdate", function(value, element) 
       return this.optional(element) ||  /^\d1,2\/\d1,2\/\d4$/.test(value);
    , "Please enter valid date.");

请根据您的代码使用 $ 或 jQuery。在这里您只需要在 jQuery 代码中添加规则,并在您的服装规则中使用验证日期。

【讨论】:

【参考方案6】:

我更喜欢在 MM/dd/yyyy 中格式化并使用与 jQuery 相同的验证。如果您覆盖 jQuery 日期验证,这将非常有效。

$.validator.methods.date = function (value, element) 
    value = dateValue(value);
    return this.optional(element) || !/Invalid|NaN/.test(new Date(value).toString());;


function dateValue(value) 
    var date = value.split("/");
    return date[2] + "/" + date[1] + "/" + date[0]

【讨论】:

以上是关于jQuery dd/MM/yyyy 日期格式验证的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PHP 中使用 jquery 验证 'dd/mm/yyyy HH:ii P' 格式的日期时间?

dd/mm/yyyy 格式的日期正则表达式,用于 javascript 验证

dd/mm/yyyy 是啥日期格式?

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

为日期 dd/mm/yyyy 编辑 Jquery.validate.js 验证中的函数

将日期格式更改为 yyyy-mm-dd