【发布时间】:2009-12-04 20:49:12
【问题描述】:
有没有办法在不使用验证器的情况下查看日期是否有效?
在这种情况下我不能使用验证器,这是一个很长的故事,打字太多,但它与无法在 javascript 中找到的嵌套控件有关。但在我插入日期之前,我想确保它在插入之前有效。有什么想法吗?
我正在使用掩码编辑器,日期可能类似于 "03/__/____",这会导致插入问题。
【问题讨论】:
标签: c# .net asp.net visual-studio datetime
有没有办法在不使用验证器的情况下查看日期是否有效?
在这种情况下我不能使用验证器,这是一个很长的故事,打字太多,但它与无法在 javascript 中找到的嵌套控件有关。但在我插入日期之前,我想确保它在插入之前有效。有什么想法吗?
我正在使用掩码编辑器,日期可能类似于 "03/__/____",这会导致插入问题。
【问题讨论】:
标签: c# .net asp.net visual-studio datetime
在客户端,使用控件的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),并参数化您的值。
【讨论】:
你在找DateTime.TryParse吗?
DateTime dt;
bool isValid = DateTime.TryParse("03/__/____", out dt); // returns false
【讨论】:
使用以下 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/
【讨论】:
最可靠的方法是使用日历控件,它将结果存储在一个定义为“有效”的日期时间变量中,并为任何目的生成各种格式化字符串。
如果您需要使用编辑,那么 TryParse 的替代方法是检查字符串中是否有两个且只有两个正斜杠,然后执行 string.Split。这将分别给你三个元素,然后验证每个元素(数组 [0] > 0 和 0 和 = today.year 和
这样,您不仅可以报告无效日期,还可以报告日期的哪个部分无效,以及原因。由于当您拒绝不符合您的业务规则的理论上有效的日期时,您无疑会变得具体,因此最好与您的用户保持一致,并在整个验证过程中尽可能具体。
【讨论】: