我正在使用ColdFusion 9.0.1。
我正在尝试测试用户是否提供了非字母数字值。如果他们有,我想要归还假。我很确定我很接近,但我一直收到错误:
Complex object types cannot be converted to simple values.
我尝试了多种方法来完成这项工作,但我无法让它发挥作用。
具体来说,我想只允许通过z和0到9.没有空格或特殊字符。
你能帮我调整一下吗?
<cfscript>
LOCAL.Description = trim(left(ARGUMENTS.Description, 15));
if (len(LOCAL.Description) lte 4) {
return false;
} else if (reMatchNoCase("[^A-Za-z0-9_]", LOCAL.Description) neq "") {
return false;
} else {
return true;
</cfscript>
w ^
答案 0 :(得分:4)
reMatchNoCase返回无法与字符串进行比较的数组,在结果上使用ArrayLen()以查明是否有匹配
您的代码中确实存在另一个问题。如果描述的长度小于15,第一行将产生错误,这意味着第一个IF已经过时,因为它总是错误的。
答案 1 :(得分:2)
reMatchNoCase(“[^ A-Za-z0-9_]”,LOCAL.Description)neq“”
这是因为ReMatchNoCase
返回一个数组,而不是一个简单的字符串。检查数组长度,或者更好的是,使用ReFindNoCase
代替。它返回第一个匹配的位置,如果未找到则返回0.
答案 2 :(得分:2)
您还可以尝试以下方法:
<cfscript>
local.description = trim(local.description);
return reFind("(?i)^[A-Z0-9_]{5,}$", local.description)?true:false;
</cfscript>
答案 3 :(得分:0)
我迟到了,但 reFindNoCase
是 2021 年的最佳解决方案。以下是我将如何处理原始问题中的代码:
// best practice not to have a local var name identical to an argument var
var myValue = trim( left( arguments.description, 15 ) );
// return false if myValue is less than 4 or has special characters
return(
!len( myValue ) lte 4 &&
!reFindNoCase( "[^a-z0-9]", myValue )
);