为什么#isValid("integer","1,5")#
输出YES?我希望它能像#isValid("integer","1.5")#
一样输出NO。
我将使用<CFIF isvalid("integer","1,5") AND isnumeric("1,5")>
...
答案 0 :(得分:18)
Adobe意识到这一点,但是......
州:已关闭
状态:退出
原因:AsDesigned
https://bugbase.adobe.com/index.cfm?event=bug&id=3169196
TBH我对使用甚至无法正确验证整数的语言感到有点尴尬。
<强>更新强>
猜猜是什么,它将在 CF12 中解决!
毫无疑问,这种行为是不正确的。很明显 错了,应该纠正。但是,它就是这样的 永远地做出这样一个根本性的改变有很大的潜力 打破了很多应用程序。我们不希望在此版本中执行此操作。 由于Rakshith已经沟通,我们计划进行这些改变 在'Dazzle'中,我们将在不担心的情况下纠正行为 向后兼容。
http://blog.adamcameron.me/2014/02/can-we-please-agree-that-adobe-is-not.html
答案 1 :(得分:17)
只是为了扩展这里的答案并解释实际发生的事情。
请参阅this related bug,其中详细说明CF将解释“m
,n
”(其中m
和n
为数字) )如果可能的话,作为日期。这是荒谬的:“m
,n
”不是表示地球上任何人的约会的格式,因此CF没有理由以这种方式解释它。
Adobe没有解决这个问题,并引用相同的理由,它会打破向后的竞争。胡说八道。
无论如何......因为日期可以转换为CF中的整数,CF认为“1,5”是一个合法的整数,因为它实际上是一个日期。作为一个专门的CF开发人员,它是多么令人尴尬的是必须为你提供而不是解释。遗憾。
答案 2 :(得分:10)
如果你想确保你有一个Integer,你可以使用Java Integer方法。
<cfscript>
createObject("java","java.lang.Integer").parseInt("1,5");
</cfscript>
当给出任何不能解释为Integer的东西时,抛出parseInt()方法。这包括"1,5"
。
答案 3 :(得分:1)
服务器端验证(仅需要cfif
逻辑,仅作为循环)
<cfloop list="2.123,a,4" index="myVal">
<cfif !isNumeric(myVal)> ...error code for not numeric<br />
<cfelseif myVal neq int(myVal)> ...error code for not integer<br />
<cfelse>is integer<br />
</cfif>
</cfloop>
更严格的直接代码:
<cfif !isNumeric(myVal) and myVal neq int(myVal)> ...error code for not integer<br />
</cfif>
你也可以写一个cffunction