Подтвердить что ты не робот

Почему isvalid ( "целое", "1,5" ) = ДА?

Почему вывод #isValid("integer","1,5")# ДА? Я ожидал, что он выдаст NO, как #isValid("integer","1.5")#.

Я собираюсь проверить с помощью <CFIF isvalid("integer","1,5") AND isnumeric("1,5")>...

4b9b3361

Ответ 1

Adobe знает об этом, но...

Состояние: Закрыто

Статус: Снято

Причина: AsDesigned

https://bugbase.adobe.com/index.cfm?event=bug&id=3169196

TBH Я немного смущен тем, что использую язык, который не может даже корректно проверять целое число.

UPDATE:

Угадайте, что он будет рассмотрен в CF12!

Нет сомнений, что это неправильное поведение. Это очевидно неправильно, и его следует исправить. Однако это было так навсегда, и такое фундаментальное изменение имеет большой потенциал для сломать много приложений. Мы не хотим этого делать в этом выпуске. Как уже сообщал Ракшит, мы планируем принять такие изменения в "Dazzle", где мы исправим поведение, не беспокоясь о обратная совместимость.

http://blog.adamcameron.me/2014/02/can-we-please-agree-that-adobe-is-not.html

Ответ 2

Просто чтобы развернуть ответ и объяснить, что происходит на самом деле.

См. эту связанную ошибку, краткое описание которой заключается в том, что CF будет интерпретировать "m, n" (где m и n являются цифрами) как DATE, если возможно. Это нелепо: "m, n" не является форматом, который представляет дату для любого на планете, поэтому нет причин, чтобы CF когда-либо интерпретировал его таким образом.

Adobe избавилась от этой проблемы, ссылаясь на то же оправдание, что она сломается назад. Глупости это было бы.

В любом случае... потому что дата может быть отлита к целому числу в CF, CF считает, что "1,5" является законным целым числом, потому что это фактически дата. Как embrrassing это - как специализированный разработчик CF - предложить вам, чем объяснять. К сожалению.

Ответ 3

Если вы хотите убедиться, что у вас есть Integer, вы можете использовать методы Java Integer.

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

Метод parseInt() выдает, когда ему дается все, что не может быть интерпретировано как целое. Это включает "1,5".

Ответ 4

Проверка на стороне сервера (нужна только логика 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