如何使用RegEx禁止ColdFusion中的非字母数字字符

时间:2011-11-15 15:11:24

标签: regex coldfusion

我正在使用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 ^

4 个答案:

答案 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 )
);