出生日期验证不断显示

2023-11-22

我正在输入一个DOB - 22/12/1986进入我的文本框,验证不断触发。它说:

The field DOB must be a date.

My MODEL:

[System.ComponentModel.DisplayName("DOB")]
[DisplayFormat(DataFormatString = "@{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
[Required(ErrorMessage = "Date Of Birth is required")]
[RegularExpression(@"{0:dd/MM/yyyy}", ErrorMessage = "Invalid Date")] // below is a link
public DateTime DOB { get; set; }

My VIEW:

<div class="form-group">
    @Html.LabelFor(model => model.DOB, htmlAttributes: new { @class = "control-label col-md-2" })
    <div class="col-md-10">
        @Html.EditorFor(model => model.DOB, new { htmlAttributes = new { @class = "form-control" } })
        @Html.ValidationMessageFor(model => model.DOB, "", new { @class = "text-danger" })
    </div>
</div>

In MS SQL database该字段是:DateTime

为什么我的验证显示我输入的日期无效?


客户端验证的原因是jquery.validate.js使用的插件jquery.validate.unobtrusive.js验证日期基于MM/dd/yyyy格式和您输入的日期基于dd/MM/yyyy format.

具体使用的代码在jquery.validate.js用于验证的是

date: function(value, element) {
    return this.optional(element) || !/Invalid|NaN/.test(new Date(value));
}

根据您使用的浏览器会产生不同的结果(在 Chrome 中,new Date('22/12/1986')回报Invalid Date但在 FireFox 中它返回1987-10-11T13:30:00.000Z这是有效的,只是不是您输入的日期)

您需要覆盖$.validator以您的文化格式化日期。一种选择是使用jquery.全球化 plugin.

或者,您可以编写自己的脚本。请注意,以下脚本取自我自己的插件,与@Html.DatePickerFor()生成日期选择器的扩展方法。扩展方法根据服务器区域性为日期格式添加 html 属性,并使用var format = regex.exec(this.inputFormat);我已注释掉并替换为您的硬编码格式的代码行。如果你只想dd/MM/yyyy格式,那么脚本可以简化,因为你只需要 'little-endian' 格式

<script type="text/javascript">
    // Override default date validator format to allow culture specific format
    $.validator.methods.date = function (value, element) {
        return this.optional(element) || globalDate(value).isValid();
    };

    globalDate = function (value) {
        // Initialise a new date
        var date = new Date(0);
        if (value == undefined) {
            // Return todays date
            return date;
        }
        // Get the components of the format
        // The separator can be forward slash, hyphen, dot and/or space
        var regex = new RegExp(/([dMy]+)([\s/.-]+)([dMy]+)([\s/.-]+)([dMy]+)/);
//------------- see notes above
        //var format = regex.exec(this.inputFormat);
        var format = regex.exec('dd/MM/yyyy');
//------------- 
        // Get the components of the value
        regex = new RegExp(/(\d+)([\s/.-]+)(\d+)([\s/.-]+)(\d+)/);
        value = regex.exec(value);
        // Check the value is valid
        if (value === null || value[2] !== format[2] || value[4] !== format[4]) {
            // Its not valid
            date.setTime(Number.NaN);
            return date;
        }
        // TODO: What if year entered as 2 digits?
        var day = Number.NaN;
        var month = Number.NaN;
        var year = Number.NAN;
        if (format[1].charAt(0) === 'd') {
            // little-endian (day, month, year)
            day = parseInt(value[1]);
            month = parseInt(value[3]) - 1;
            year = parseInt(value[5]);
        } else if (format[1].charAt(0) === 'M') {
            // middle-endian (month, day, year)
            day = parseInt(value[3]);
            month = parseInt(value[1]) - 1;
            year = parseInt(value[5]);
        } else {
            // big endian (year, month, day)
            day = parseInt(value[5]);
            month = parseInt(value[3]) - 1;
            year = parseInt(value[1]);
        }
        date.setFullYear(year);
        date.setMonth(month);
        date.setDate(day);
        // Check its valid
        if (date.getDate() !== day || date.getMonth() !== month || date.getFullYear() !== year) {
            date.setTime(Number.NaN);
            return date;
        }
        return date;
    }

    // Methods 
    Date.prototype.isValid = function () {
        return !isNaN(this.getTime());
    }
</script>

旁注:你的[RegularExpression]属性不执行任何操作并且可以删除。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

出生日期验证不断显示 的相关文章

随机推荐

  • 更改“选择”突出显示颜色[重复]

    这个问题在这里已经有答案了 我有一个自定义的下拉菜单框 见图 我想更改选项上的突出显示颜色以摆脱可怕的蓝色并将其更改为我选择的颜色 我还想停止周围的蓝色突出显示框整个事情并从选项框中删除边框 我该如何删除其中的任何一个或全部 Thanks
  • 如何使用 Swift 以编程方式更改语言环境

    我正在通过 Swift 在 XCODE 6 3 上制作 ios 应用程序 我的应用程序将具有选择语言功能 如下图所示 我已经有了本地语言的故事板 但我不知道如何通过按钮以编程方式更改应用程序的本地化 任何人都知道该怎么做 下面是使用 Swi
  • RDF图蕴涵

    我刚刚读到了 RDF 资源描述框架 的蕴涵概念 任何人都可以告诉我两个 RDF 图的蕴涵示例并对其进行一些解释 Thanks 假设您有以下内容 ex book1 rdf type ex Publication ex book2 rdf ty
  • 如何查找分组的 SQL 中位数

    我正在使用 SQL Server 2008 如果我有一个这样的表 Code Value 4 240 4 299 4 210 2 NULL 2 3 6 30 6 80 6 10 4 240 2 30 请问如何通过代码列找到中位数 AND 组
  • 警告:未知转义序列:'\040' [默认启用]

    我正在用 C 语言编写一个简单的应用程序 我想在 BSD 许可证下发布它 应用程序的一部分负责向用户打印有关程序的信息 但是 我在打印许可证文本时遇到问题 这是例子 include
  • 为什么并发字典没有可见的 Add() 方法?

    我只是想知道 ConcurrentDictionary 怎么可能没有 Visual Studio IDE 中可见的 Add 方法 我似乎只得到 TryX 方法 例如 TryAdd TryUpdate 等 我可以看到ConcurrentDic
  • 如何在两个以上的UIView之间做翻转动画?

    我在扩展 UIView 的类中有动画代码 Start Animation Block CGContextRef context UIGraphicsGetCurrentContext UIView beginAnimations nil c
  • Spring+Hibernate 中的@Transactional

    我正在使用春季 3 1 休眠 4 x在我的网络应用程序中 在我的 DAO 中 我保存用户类型对象如下 sessionFactory getCurrentSession save user 但出现以下异常 org hibernate Hibe
  • 向 CGPoint 类型参数发送 nil

    假设我有这个方法 void placeView UIView theView withCenterIn CGPoint centerPoint 所以我传递了视图和一个指向视图中心的点 但碰巧我不需要指定中心 只需要指定视图 传递 nil 会
  • 需要一个正则表达式工具来根据所选文本建议表达式[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我发现了一些在线工具 可以让我查看我在示例文本上创建的正则表达式的效果 但我正在寻找一种可以根据所选文本的一部分提出表达式建议的工具 例如 假设我有
  • 该IP、站点或移动应用程序无权使用该IP授权的API密钥

    我正在使用 Google Places API 它要求您提供允许使用该服务的 IP 列表 该 API 在我的本地计算机上运行良好 但它给出了 该IP 网站或移动应用程序无权使用该API 钥匙 当我从生产服务器使用它时 我已经添加了所需的 I
  • 具有相同签名的两个方法的互斥约束

    所以这两个方法具有相同的签名但不同的约束 public static void Method
  • 有开放的 iCalender API 吗? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 是否有任何 API 可供我使用并将事件数据发布到 例如使用查询字符串 并取回访问者可以下载并添加到其日历中的文件 我当然可以自己编写脚本 但如果有开
  • 程序化短信[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 以编程方式发送短信的最佳方式是什么 是否有基于免费 Web 服务的 SMS 网关 我知道如果我碰巧知道用户的运营商 Sprint AT T 等 我可以发送通过电子邮件地址发送短信
  • Android 中的 RxJava 异步任务

    我正在尝试在 Android 中使用 RxJava 实现异步任务 我尝试了以下代码 但没有成功 它在 UI 线程上执行 我正在使用以下版本的 RxAndroid 0 24 0 try Observable just someMethodWh
  • 在 SQL 中选择具有多个 GROUP 的表中 TOP 2 值的 SUM

    我一直在 SQL Server 2000 中使用集合 并且我的临时表之一 Periods 具有以下表结构 RestCTR HoursCTR Duration Rest 1 337 2 0 2 337 46 1 3 337 2 0 4 337
  • 地址栏中的 JavaScript - 这是恶意的吗?

    我在 Facebook 上收到一条消息 要求我将其复制并粘贴到我的地址栏中 我想我应该把它发布在这里 看看大家对此有何看法 它有什么作用 它是如何工作的 这是源代码 DO NOT DO THIS Javascript var a x69 x
  • 序列化异步有很多关系

    我对 EmberJS 相当陌生 我整个晚上都在摆弄 试图在我正在开发的新应用程序中保留一些 hasMany 和多对多关系 我正在使用 Ember DataActiveModelAdapter将其连接到我正在使用的 Rails 后端Activ
  • Angular JS,“nomod”,模块“{0}”不可用!你要么拼写错误

    这是我的index html中的代码
  • 出生日期验证不断显示

    我正在输入一个DOB 22 12 1986进入我的文本框 验证不断触发 它说 The field DOB must be a date My MODEL System ComponentModel DisplayName DOB Displ