Почему ColdFusion считает, что значение «7+» является допустимым целочисленным значением, и как я могу проверить, что это не так? - PullRequest
4 голосов
/ 03 ноября 2011

У меня есть форма для пользователей для ввода количеств.Форма имеет проверку на стороне клиента, чтобы убедиться, что значение является целым числом и находится в заданном диапазоне.Страница действия имеет проверку на стороне сервера, чтобы убедиться, что значение является целым числом и больше нуля.

Однако один тип значения проходит проверку и вызывает мои запросы INSERT / UPDATE для создания исключений.Это значение является целым числом со знаком плюс - то есть «7+» или «12+».

Когда вводится такое значение, проверка JavaScript, генерируемая ColdFusion, выдает ошибку JavaScript:

_CF_checkformAddToCart = function(_CF_this)
{
    //reset on submit
    _CF_error_exists = false;
    _CF_error_messages = new Array();
    _CF_error_fields = new Object();
    _CF_FirstErrorField = null;

    //form element itemQuantity 'INTEGER' validation checks
    if (!_CF_checkinteger(_CF_this['itemQuantity'].value, false))
    {
        _CF_onError(_CF_this, "itemQuantity", _CF_this['itemQuantity'].value, "Error on itemQuantity, please enter an integer value for quantity that is not greater than 500");
        _CF_error_exists = true;
    }

    //form element itemQuantity 'RANGE' validation checks
    if  (!_CF_checkrange(_CF_this['itemQuantity'].value, 0.0,500.0, false))
    {
        _CF_onError(_CF_this, "itemQuantity", _CF_this['itemQuantity'].value, "Error on itemQuantity, please enter an integer value for quantity that is not greater than 500");
        _CF_error_exists = true;
    }
}

Как только я отменяю всплывающее окно с ошибкой, оно переходит на страницу действий, гдеЯ [пытаюсь] проверить значение следующим образом:

<cfif IsValid("integer", form.itemQuantity) AND form.itemQuantity GT 0>
    <cfquery>
        INSERT ....

Однако, если попробовать это ...

<cfset x = Int("7+") />

... ColdFusion выдает ошибку.

Это целое число или нет ColdFusion ???

Как можно обойти это и проверить правильность ввода моей формы?

Ответы [ 3 ]

4 голосов
/ 03 ноября 2011

isNumeric(form.itemQuantity) вернет false для "7+", поэтому для полной проверки вашего ввода как int, вы можете сделать это

<cfif isNumeric(form.itemQuantity) and IsValid("integer", form.itemQuantity) AND form.itemQuantity GT 0>
1 голос
/ 03 ноября 2011

Из-за странной и чудесной природы ColdFusion не имеет типов.Он не знает, с каким типом данных вы работаете, и пытается угадать.

Оценка 7+ является действительной.Проверка, встроенная в ColdFusion, делает много предположений и предположений.

Я бы посоветовал не использовать ее и написать свои собственные процедуры проверки, которые можно усовершенствовать, чтобы делать все, что вам нужно.

Например,

Пользователь вводит

2075

Это допустимо или недействительно.Ну, если у вас есть своя собственная проверка, которую вы можете решить, вы можете сказать, что это целое число и дистанционно, или вы можете сказать, что нет, они не могут этого сделать.

Это небольшая инвестиция, которая окупитсяв долгосрочной перспективе.

0 голосов
/ 03 ноября 2011

Оказывается, я могу использовать LSParseNumber () для преобразования его в действительное целое число. Итак, теперь я проверяю правильное целое число, затем сбрасываю его с помощью LSParseNumber (), прежде чем пытаться вставить любую базу данных:

<cfset addItemQty = 0 />

<cfif IsValid("integer", Trim(form.itemQuantity))>
    <cfset addItemQty = LSParseNumber(Trim(form.itemQuantity)) />
</cfif>

Полагаю, мне придется заново разработать клиентский интерфейс для правильной проверки.

...