我想在用户提交表单后验证日期参数。我的应用程序运行在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。如果任何人有任何建议,请让我知道。谢谢。
发布于 2017-06-02 21:59:21
这里还有一些你应该在服务器端检查的东西。这段代码:
writeoutput (dateformat("Apr 31", "yyyy-mm-dd"));返回1931-04-01。这是一个完全有效的日期,它通过了你问题中的每一个测试。您如何处理它取决于1931年对于您的应用程序是否有效。
另外需要考虑的是,如果提交了一个类似"fred“的值,那么您的第一个命令<cfset getMonth = Month(myDate)>将抛出一个错误。这在某种程度上使您正在尝试的其余部分变得不必要。
您可能会考虑以下几点:
在窗体中使用日期选择器而不是文本框的
<cfinput mask="something">。请注意,此选项很烦人如果在提交表单时预先填充了field.
上的输入tag
就我个人而言,我使用了指令的组合,预先填充了输入、<cfinput validate="date">和我几年前编写的一些仅使用isDate()的自定义标记。它不是完美的,但它可以完成工作。
https://stackoverflow.com/questions/44329593
复制相似问题