12

为什么#isValid("integer","1,5")#输出YES?我希望它会像这样输出 NO #isValid("integer","1.5")#

我要验证<CFIF isvalid("integer","1,5") AND isnumeric("1,5")>...

4

4 回答 4

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

于 2012-07-18T07:58:44.057 回答
17

只是在这里扩展答案并解释实际发生的事情。

请参阅此相关错误,其中的详细信息摘要是 CF 将尽可能将“ 、”(其中和是数字)m解释nmDATE 。n这太荒谬了:“ m, n”不是代表地球上任何人的日期的格式,因此 CF 没有理由以这种方式解释它。

Adobe 以同样的理由拒绝解决这个问题,理由是它会破坏向后兼容。废话会的。

无论如何...因为日期可以转换为 CF 中的整数,所以 CF 认为“1,5”是一个合法整数,因为它实际上是一个日期。作为一个专门的 CF 开发人员,不得不为您提供解释是多么令人尴尬。对不起。

于 2012-07-18T11:31:03.390 回答
10

如果你想绝对确定你有一个 Integer,你可以使用 Java Integer 方法。

<cfscript>
createObject("java","java.lang.Integer").parseInt("1,5");
</cfscript>

parseInt() 方法在给出任何不能被解释为整数的东西时抛出。这包括"1,5".

于 2012-07-18T10:32:26.087 回答
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你也可以写一个

于 2016-08-08T18:37:29.630 回答