【问题标题】:Validate date without using validators?不使用验证器验证日期?
【发布时间】:2009-12-04 20:49:12
【问题描述】:

有没有办法在不使用验证器的情况下查看日期是否有效?

在这种情况下我不能使用验证器,这是一个很长的故事,打字太多,但它与无法在 javascript 中找到的嵌套控件有关。但在我插入日期之前,我想确保它在插入之前有效。有什么想法吗?

我正在使用掩码编辑器,日期可能类似于 "03/__/____",这会导致插入问题。

【问题讨论】:

    标签: c# .net asp.net visual-studio datetime


    【解决方案1】:

    在客户端,使用控件的onBlur调用一个javascript函数,即:

    function makeDateValid(text)
    {
       //relevent js date formatting code
       return validDateText;
    }
    </script>
    

    在你的控制之下

    <asp:TextBox ID="txtDate" runat="server" 
    onBlur="this.value=makeDateValid(this.value)" />
    

    那么你就不需要用javascript找到控件了。

    不过,您不应该相信这样可以保证您的 SQL 安全。您应该在服务器端进行验证 (DateTime.TryParse),并参数化您的值。

    【讨论】:

      【解决方案2】:

      你在找DateTime.TryParse吗?

      DateTime dt;
      bool isValid = DateTime.TryParse("03/__/____", out dt); // returns false
      

      【讨论】:

      • 我相信他的意思是客户端
      【解决方案3】:

      使用以下 javascript。然后,您可以禁用提交按钮/链接,直到验证通过。

         function checkdateformat(userinput){
            var dateformat = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/
            return dateformat.test(userinput) //returns true or false depending on userinput
          }
      

      这个正则表达式示例取自here

      还可以查看这些其他示例/代码:

      http://www.the-art-of-web.com/javascript/validate-date/

      http://www.rgagnon.com/jsdetails/js-0063.html

      还有一个 jQuery 插件: http://bassistance.de/jquery-plugins/jquery-plugin-validation/

      【讨论】:

        【解决方案4】:

        最可靠的方法是使用日历控件,它将结果存储在一个定义为“有效”的日期时间变量中,并为任何目的生成各种格式化字符串。

        如果您需要使用编辑,那么 TryParse 的替代方法是检查字符串中是否有两个且只有两个正斜杠,然后执行 string.Split。这将分别给你三个元素,然后验证每个元素(数组 [0] > 0 和 0 和 = today.year 和

        这样,您不仅可以报告无效日期,还可以报告日期的哪个部分无效,以及原因。由于当您拒绝不符合您的业务规则的理论上有效的日期时,您无疑会变得具体,因此最好与您的用户保持一致,并在整个验证过程中尽可能具体。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-10-31
          • 1970-01-01
          • 2012-03-11
          • 1970-01-01
          • 2018-10-21
          • 2020-10-24
          • 1970-01-01
          • 2012-04-27
          相关资源
          最近更新 更多