不使用验证器验证日期?

时间:2009-12-04 20:49:12

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

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

我不能在这个实例中使用验证器,这是一个很长的故事,无法输入,但它与嵌套控件无法在javascript中找到。但在插入日期之前,我想确保它在插入之前有效。任何想法?

我正在使用屏蔽程序,日期可能看起来像"03/__/____",这会导致插入问题。

4 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

您在寻找DateTime.TryParse吗?

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

答案 2 :(得分:2)

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

答案 3 :(得分:0)

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

如果你需要使用编辑,那么TryParse的替代方法是检查字符串中是否有两个且只有两个正斜杠,然后执行string.Split。这将单独给出三个元素,然后验证每个元素(Is array [0]&gt; 0和&lt; 13是array [1]&gt; 0和&lt; 29,30,31,32,视情况而定[2]&gt; = today.year和&lt; today.year + 2等)

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