我想在用户提交表单后验证日期参数。我的应用程序正在ColdFusion 9上运行,并且在isDate()
之类的功能中,几乎没有内置功能,但是即使对于某些时髦的日期值,此功能也会返回True。我已经接近这种方式来验证我的日期论点:
<cfarguments name="myDate" type="string" required="true">
<cfset getMonth = Month(myDate)>
<cfset getDay = Day(myDate)>
<cfset getYear = Year(myDate)>
<cfif getMonth LT 1 OR getMonth GT 12>
<cfset message = "Month value should be in a range between 1 and 12.">
<cfelseif getDay LT 1 OR getDay GT 31>
<cfset message = "Day value should be in a range btween 1 and 31.">
<cfelseif ((getMonth EQ 4 OR getMonth EQ 6 OR getMonth EQ 9 OR getMonth EQ 11) AND getDay EQ 31)>
<cfset message = "Month of April, June, September and November have 30 days.">
<cfelseif getMonth EQ 2>
<cfset isLeap = (getYear MOD 4 AND (getYear MOD 100 NEQ 0 OR getYear MOD 400 EQ 0))>
<cfif (getDay GT 29 OR (getDay EQ 29 AND NOT isLeap))>
<cfset message = "Only leap year can have 29 days.">
</cfif>
</cfif>
我想知道这种验证日期是否有任何问题?我试图将日期,每月和年分开。然后,我检查每个都在正确的范围内。我不确定我还应该寻找其他任何东西。我在我的应用中使用了我们日期格式mm/dd/yyyy。如果有人有任何建议,请告诉我。谢谢。
这是您应该在服务器端检查的其他内容。此代码:
writeoutput (dateformat("Apr 31", "yyyy-mm-dd"));
返回1931-04-01。这是一个完全有效的日期,可以通过您的问题中的每个测试。您对此的处理取决于1931年是否对您的申请有效。
其他要考虑的东西是,如果提交了" Fred"之类的值,那么您的第一个命令<cfset getMonth = Month(myDate)>
将丢弃错误。这使您尝试的其余部分不必要。
您可能会考虑的事情是:
- 使用datepickers而不是您的表格中的文本框。
- 在您的表格中使用
<cfinput mask="something">
。请注意,这个选项很烦人
如果您的填充田地。 - 提交表格时JavaScript验证
- 输入标签中的最大属性
- 表格上的说明
我个人使用了指令的组合,预先填充输入,<cfinput validate="date">
以及几年前写的一些自定义标签,这些标签仅使用isdate((。这不是完美的,但是可以完成工作。