代码之家  ›  专栏  ›  技术社区  ›  Eric

不使用验证程序验证日期?

  •  1
  • Eric  · 技术社区  · 15 年前

    有没有一种方法可以在不使用验证器的情况下查看日期是否有效?

    我不能在这个实例中使用验证器,这是一个很长的故事,太多的类型,但它必须与嵌套控件,无法在javascript中找到。但是在我插入日期之前,我想确保它在插入之前是有效的。有什么想法吗?

    我用的是蒙面编辑,日期看起来像这样 "03/__/____" 这会导致插入问题。

    4 回复  |  直到 15 年前
        1
  •  2
  •   dtb    15 年前

    你在找吗 DateTime.TryParse ?

    DateTime dt;
    bool isValid = DateTime.TryParse("03/__/____", out dt); // returns false
    
        2
  •  3
  •   jball    15 年前

    在客户端,使用控件的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.typarse)进行验证,并参数化您的值。

        3
  •  2
  •   Joseph Yaduvanshi    15 年前

    使用以下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
        }
    

    这个regex示例取自 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
  •  0
  •   dtb    15 年前

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

    如果您需要使用编辑,那么台盼色的另一种选择是检查字符串中是否有两个且只有两个正斜杠,然后执行string.split。这将分别为您提供三个元素,然后验证每个元素(is array[0]>0和<13是array[1]>0和<29、30、31、32(视情况而定),is array[2]>=today.year和<today.year+2等)

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