检查值是否为整数的最佳方法?Coldfusion 9

esp*_*fee 2 coldfusion integer isnumeric coldfusion-9

我有要测试的字段,并确保它们仅接受integers。功能很少,但是我不确定哪个是最好的。首先,我尝试了一下,isValid("integer",value)但是发现“ 1,5”将被接受为整数。因此,我尝试了一下,isNumeric(value)但是它将接受类似的值1.5。我想知道什么是检查整数的最佳方法?也许两个结合了这两个功能,例如:

<cfif isValid("integer",value) AND isNumeric(value)>
Run Code Online (Sandbox Code Playgroud)

还是有更好的方法来做到这一点?

Ale*_*lex 5

脚本

// Returns if the provided value is a signed integer up to 32 Bit.
function isINT(any value) {

    return (
        isSimpleValue(ARGUMENTS.value) &&
        (reFind("^\-?[0-9]{1,10}$", ARGUMENTS.value) > 0) &&
        (ARGUMENTS.value <= 2147483647) &&
        (ARGUMENTS.value >= -2147483648)
    );
}
Run Code Online (Sandbox Code Playgroud)

cftag

<cffunction name="isINT" access="public" output="false" returnType="boolean"
    hint="Returns if the provided value is a signed integer up to 32 Bit.">

    <cfargument name="value" type="any" required="true">

    <cfreturn (
        isSimpleValue(ARGUMENTS.value) and
        (reFind("^\-?[0-9]{1,10}$", ARGUMENTS.value) gt 0) and
        (ARGUMENTS.value lte 2147483647) and
        (ARGUMENTS.value gte -2147483648)
    )>
</cffunction>
Run Code Online (Sandbox Code Playgroud)
  • isSimpleValue 确保输入为原始类型(通过CF表示),因为在CF(字符串转换)中所有数字均被视为简单值
  • reFind正则表达式仅检查数字(带或不带符号),最少一位,最多十位(toString此处隐式调用)
  • 检查范围,所有数字类型都适合4字节,因此无需“升级”类型(就像使用BigInteger,BigDecimal等一样)

如果您不需要4字节整数的范围检查,@ DanBracuk发布的答案的功能将比该函数快5到6倍。