为什么#isValid("integer","1,5")#
输出YES?我希望它会像这样输出 NO #isValid("integer","1.5")#
。
我要验证<CFIF isvalid("integer","1,5") AND isnumeric("1,5")>
...
为什么#isValid("integer","1,5")#
输出YES?我希望它会像这样输出 NO #isValid("integer","1.5")#
。
我要验证<CFIF isvalid("integer","1,5") AND isnumeric("1,5")>
...
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
只是在这里扩展答案并解释实际发生的事情。
请参阅此相关错误,其中的详细信息摘要是 CF 将尽可能将“ 、”(其中和是数字)m
解释n
为m
DATE 。n
这太荒谬了:“ m
, n
”不是代表地球上任何人的日期的格式,因此 CF 没有理由以这种方式解释它。
Adobe 以同样的理由拒绝解决这个问题,理由是它会破坏向后兼容。废话会的。
无论如何...因为日期可以转换为 CF 中的整数,所以 CF 认为“1,5”是一个合法整数,因为它实际上是一个日期。作为一个专门的 CF 开发人员,不得不为您提供解释是多么令人尴尬。对不起。
如果你想绝对确定你有一个 Integer,你可以使用 Java Integer 方法。
<cfscript>
createObject("java","java.lang.Integer").parseInt("1,5");
</cfscript>
parseInt() 方法在给出任何不能被解释为整数的东西时抛出。这包括"1,5"
.
服务器端验证(只需要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
你也可以写一个