为什么ColdFusion认为值“7+”是一个有效的整数值,以及我如何验证它不是?

时间:2011-11-02 21:41:53

标签: forms validation coldfusion textinput

我有一个供用户输入数量的表单。该表单具有客户端验证,以确保该值是一个整数并在给定范围内。操作页面具有服务器端验证,以确保该值为整数且大于零。

但是,一种类型的值会通过验证并导致我的INSERT / UPDATE查询抛出异常。该值是带加号的整数 - 即“7+”或“12+”。

输入此类值时,ColdFusion生成的JavaScript验证会引发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 个答案:

答案 0 :(得分:4)

isNumeric(form.itemQuantity)将为“7+”返回false,因此要将输入完全验证为int,您可以执行此操作

<cfif isNumeric(form.itemQuantity) and IsValid("integer", form.itemQuantity) AND form.itemQuantity GT 0>

答案 1 :(得分:1)

由于ColdFusion的奇怪和美妙的性质是无类型的。它不知道你正在使用什么类型的数据,它试图猜测。

评估7+是有效的。 ColdFusion内置的验证做了很多假设和猜测。

我的建议是不要使用它并编写自己的验证程序,可以增强它们以满足您的需求。

例如

用户输入

2075

这是有效还是无效。好吧,如果你有自己的验证,你可以决定,你可以确定这是一个整数和遥远的,或者你可以说不,他们不能这样做。

这是一项小额投资,从长远来看会得到回报。

答案 2 :(得分:0)

结果我可以使用LSParseNumber()将其转换为有效整数。所以,现在我正在测试一个有效的整数,然后在尝试任何数据库插入之前使用LSParseNumber()重置它:

<cfset addItemQty = 0 />

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

我想我必须重新设计前端客户端验证才能正确验证。