ColdFusion 9日期验证?

时间:2017-06-02 12:58:48

标签: validation date coldfusion 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。如果有人有任何建议,请告诉我。谢谢。

1 个答案:

答案 0 :(得分:1)

这是您应该在服务器端检查的其他内容。这段代码:

writeoutput (dateformat("Apr 31", "yyyy-mm-dd"));

返回1931-04-01。这是一个完全有效的日期,可以通过您问题中的每个测试。你做什么取决于1931年是否适用于你的申请。

要考虑的其他因素是,如果像&#34; fred&#34;提交后,您的第一个命令<cfset getMonth = Month(myDate)>将抛出错误。这样做会使你正在尝试的其余部分变得不必要。

你可能会考虑的事情是:

  • 在表单中使用datepickers而不是textboxes。
  • 在表单中使用<cfinput mask="something">。请注意,这个选项很烦人 如果您预填充该字段。
  • 提交表单时的javascript验证
  • 输入标记中的maxlength属性
  • 表格上的说明

我个人使用指令的组合,预填充输入,<cfinput validate="date">,以及几年前我写的一些自定义标签,只使用isDate()。它并不完美,但它完成了工作。