为什么无效(“整数”,“1,5”)=是?

时间:2012-07-18 07:06:49

标签: validation coldfusion integer coldfusion-9

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

我将使用<CFIF isvalid("integer","1,5") AND isnumeric("1,5")> ...

进行验证

4 个答案:

答案 0 :(得分:18)

Adob​​e意识到这一点,但是......

  

州:已关闭

     

状态:退出

     

原因: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将解释“mn”(其中mn为数字) )如果可能的话,作为日期。这是荒谬的:“mn”不是表示地球上任何人的约会的格式,因此CF没有理由以这种方式解释它。

Adob​​e没有解决这个问题,并引用相同的理由,它会打破向后的竞争。胡说八道。

无论如何......因为日期可以转换为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