12

#isValid("integer","1,5")#YES が出力されるのはなぜですか? 私はそれがそうであるようにNOを出力することを期待して#isValid("integer","1.5")#いました。

で検証し<CFIF isvalid("integer","1,5") AND isnumeric("1,5")>ます...

4

4 に答える 4

18

アドビはこれを認識していますが...

状態: クローズ

ステータス: 撤回

理由: 設計どおり

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, n」 (ここでmとは数字) を DATE として解釈することです。nこれはばかげています: " m, n" は地球上の誰に対しても日付を表す形式ではないため、CF がこのように解釈する理由はありません。

Adobe は、後方互換性を損なうという同じ言い訳を理由に、この問題を修正することをやめました。ナンセンスだろう。

とにかく... CFでは日付を整数にキャストできるため、CFは「1,5」が実際には日付であるため、正当な整数であると考えています。熱心な CF 開発者として、説明よりも提供しなければならないのは、どれほど恥ずかしいことでしょう。ごめん。

于 2012-07-18T11:31:03.390 に答える
10

整数を使用していることを絶対に確認したい場合は、Java整数メソッドを使用できます。

<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 に答える