Validation 查看时间

Validation 查看时间,validation,datetime,coldfusion,coldfusion-2016,Validation,Datetime,Coldfusion,Coldfusion 2016,我有一个表单字段,其中可能有日期和时间。我需要确认日期和时间都存在 <input type="text" name="transdate" ... /> 当我运行此代码时: cat: #date_cat# isValid(date): #isValid('date', date_cat)# isValid(time): #isValid('time', date_cat)# 我明白了 cat:12/05/2018:24 PM isValiddate:YES isValidtim

我有一个表单字段,其中可能有日期和时间。我需要确认日期和时间都存在

 <input type="text" name="transdate" ... />
当我运行此代码时:

cat: #date_cat# isValid(date): #isValid('date', date_cat)# isValid(time): #isValid('time', date_cat)#
我明白了


cat:12/05/2018:24 PM isValiddate:YES isValidtime:YES

以下是我如何处理它的,我在连接之前验证了字段

if (form.trans_date_h == "" || form.trans_date_m == "" || form.trans_date_t == "") {
   // error handling here
然后进行连接

date_cat = "#form.trans_date# #form.trans_date_h#:#form.trans_date_m# #form.trans_date_t#";

下面是我如何处理它的,我在连接之前验证了字段

if (form.trans_date_h == "" || form.trans_date_m == "" || form.trans_date_t == "") {
   // error handling here
然后进行连接

date_cat = "#form.trans_date# #form.trans_date_h#:#form.trans_date_m# #form.trans_date_t#";

有些人讨厌正则表达式。我爱他们。为什么不检查连接的字符串呢

dtRegEx = "^(0[1-9]|1[0-2])/(0[1-9]|[1-2][0-9]|3[0-1])/[1-9][0-9]{3} (0[0-9]|1[0-2]):[0-5][0-9] (am|pm)$";

if (reFind(dtRegEx, date_cat) and isDate(date_cat)) {
    // valid datetime
} else {
    // invalid datetime
}
正则表达式分解 请注意,上面的模式可能仍然会导致日期范围无效,如2018年2月31日,这就是为什么您仍然应该使用isDate进行检查


有些人讨厌正则表达式。我爱他们。为什么不检查连接的字符串呢

dtRegEx = "^(0[1-9]|1[0-2])/(0[1-9]|[1-2][0-9]|3[0-1])/[1-9][0-9]{3} (0[0-9]|1[0-2]):[0-5][0-9] (am|pm)$";

if (reFind(dtRegEx, date_cat) and isDate(date_cat)) {
    // valid datetime
} else {
    // invalid datetime
}
正则表达式分解 请注意,上面的模式可能仍然会导致日期范围无效,如2018年2月31日,这就是为什么您仍然应该使用isDate进行检查



您可能可以使用isValidmyDate、datetime\u对象。或者parseDateTImemyDate,然后对其进行一些处理。您有固定格式的值,还是自由格式的条目?@Shawn,在任何下拉菜单上,顶部都是空白的。日期不是所有字段都必需的字段。如果用户输入了一个,那么整个内容需要是一个有效的日期时间,但是他们是否能够在日期或时间中输入任何他们想要的文本,或者应用程序是否指定了它?如果日期和时间的格式由应用程序控制,那么解析它就容易多了,因为您可以指定该字符串的预期格式。您是否有输入表单字段的示例?您是否能够在将其转换为字符串之前进行验证?您可能可以使用isValidmyDate、datetime\u对象。或者parseDateTImemyDate,然后对其进行一些处理。您有固定格式的值,还是自由格式的条目?@Shawn,在任何下拉菜单上,顶部都是空白的。日期不是所有字段都必需的字段。如果用户输入了一个,那么整个内容需要是一个有效的日期时间,但是他们是否能够在日期或时间中输入任何他们想要的文本,或者应用程序是否指定了它?如果日期和时间的格式由应用程序控制,那么解析它就容易多了,因为您可以指定该字符串的预期格式。您是否有输入表单字段的示例?你能在将它连接到字符串之前进行验证吗?在再次陷入日期处理的兔子洞之后,顺便说一句,使用Alex的正则表达式可能是验证字符串的最好方法。特别是如果您知道预期的传入格式。我使用了parseDateTime,它在您的示例中给出了正确的结果。但当我把它扔到datetimes之外时,它变得非常不稳定,比如13/35/0031 25:43下午。CF实际上能够将其解析为datetime对象。所以现在我必须看看它在做什么来找出原因。再次感谢您的家庭作业。:-/@Shawn-之所以解析古怪的日期,可能是因为CF在封面下使用SimpleDataFormat,并且默认为setLenienttrue。似乎将0031年转换为1931年,这是有意义的,两位数的年份,然后将额外的天数滚动到1932-02-05 14:12:00@Ageax CF 2016在更新3后停止使用SimpleDataFormat。或者至少Adobe的文档说它做到了。老实说,我总是用我所说的任何一种语言来约会。我所看到的唯一一致的事情是,它们根本没有意义,需要像鹰一样被监视。你可能会认为,有自己的ISO标准的东西不会让你这么痛苦-|@肖恩-哇。。我不知道有什么变化。不知道他们用的是什么。希望不是本土的验证,因为考虑到像IsDate这样的事情是多么的宽大,这真的很可怕@我知道。就在我习惯了SimpleDateFormat的时候,他们放弃了。但是考虑到CF并不是一种真正区分大小写的语言,而Java是,它有点道理。尤其是因为不是所有CF的日期格式化函数都依赖SimpleDataFormat。但在所有决定不担心向后兼容性的时候,这是一个奇怪的选择。如果对yyyy和yyyy一视同仁,CF将失去很多日期含义:-/在再次陷入日期处理的兔子洞之后,顺便说一句,使用Alex的正则表达式可能是验证字符串的最好方法。特别是如果您知道预期的传入格式。我使用了parseDateTime,它在您的示例中给出了正确的结果。但当我把它扔到datetimes之外时,它变得非常不稳定,比如13/35/0031 25:43下午。CF实际上能够将其解析为datetime对象。所以现在我必须看看它在做什么来找出原因。再次感谢您的家庭作业。:-/@Shawn-这个奇怪的日期可能是被解析的,因为CF在封面下使用SimpleDataFormat,一个
默认设置为setLenienttrue。似乎将0031年转换为1931年,这是有意义的,两位数的年份,然后将额外的天数滚动到1932-02-05 14:12:00@Ageax CF 2016在更新3后停止使用SimpleDataFormat。或者至少Adobe的文档说它做到了。老实说,我总是用我所说的任何一种语言来约会。我所看到的唯一一致的事情是,它们根本没有意义,需要像鹰一样被监视。你可能会认为,有自己的ISO标准的东西不会让你这么痛苦-|@肖恩-哇。。我不知道有什么变化。不知道他们用的是什么。希望不是本土的验证,因为考虑到像IsDate这样的事情是多么的宽大,这真的很可怕@我知道。就在我习惯了SimpleDateFormat的时候,他们放弃了。但是考虑到CF并不是一种真正区分大小写的语言,而Java是,它有点道理。尤其是因为不是所有CF的日期格式化函数都依赖SimpleDataFormat。但在所有决定不担心向后兼容性的时候,这是一个奇怪的选择。如果对yyyy和yyyy一视同仁,CF将失去很多日期含义:-/很好的解释。看起来对^的描述是意外遗漏的。很好的解释。看起来对^的描述是意外遗漏的。