ColdFusion 9日期验证



我想在用户提交表单后验证日期参数。我的应用程序正在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((。这不是完美的,但是可以完成工作。

最新更新