首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ColdFusion 9日期验证?

ColdFusion 9日期验证?
EN

Stack Overflow用户
提问于 2017-06-02 20:58:48
回答 1查看 470关注 0票数 1

我想在用户提交表单后验证日期参数。我的应用程序运行在ColdFusion 9上,像isDate()这样的内置函数很少,但这个函数即使对于一些奇怪的日期值也会返回true。我采用这种方法来验证我的日期参数:

代码语言:javascript
复制
<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。如果任何人有任何建议,请让我知道。谢谢。

EN

回答 1

Stack Overflow用户

发布于 2017-06-02 21:59:21

这里还有一些你应该在服务器端检查的东西。这段代码:

代码语言:javascript
复制
writeoutput (dateformat("Apr 31", "yyyy-mm-dd"));

返回1931-04-01。这是一个完全有效的日期,它通过了你问题中的每一个测试。您如何处理它取决于1931年对于您的应用程序是否有效。

另外需要考虑的是,如果提交了一个类似"fred“的值,那么您的第一个命令<cfset getMonth = Month(myDate)>将抛出一个错误。这在某种程度上使您正在尝试的其余部分变得不必要。

您可能会考虑以下几点:

在窗体中使用日期选择器而不是文本框的

  • 在表单中使用<cfinput mask="something">。请注意,此选项很烦人

如果在提交表单时预先填充了field.

  • javascript验证,请在表单

上的输入tag

  • instructions中添加一个

  • 属性

就我个人而言,我使用了指令的组合,预先填充了输入、<cfinput validate="date">和我几年前编写的一些仅使用isDate()的自定义标记。它不是完美的,但它可以完成工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44329593

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档