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)
还是有更好的方法来做到这一点?
// 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)
<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字节整数的范围检查,@ DanBracuk发布的答案的功能将比该函数快5到6倍。