如何更新正则表达式以仅允许空值或字母数字

时间:2019-07-05 23:56:13

标签: regex coldfusion lucee

我正在尝试修改正则表达式,以便只允许使用空值或字母数字。

我目前有这个,但是它只验证字母数字

if (ruletype eq "alphanumeric") {
    bMatch = true;
    variables.fieldName = listGetAt(arguments.rules[nRow],2,",");
    if (structKeyExists(arguments.form, "#variables.fieldName#")){
        if (NOT RefindNoCase("[[:alnum:]]",arguments.form[variables.fieldName])) {
            lstError = listAppend(lstError,nRow,",");
        }
    } else {
        lstError = listAppend(lstError,nRow,",");
    }
}

我尝试转换为重新匹配以找到empty value,但是它也接受包含特殊字符的值1234^%^&&。我不确定该如何解决。

2 个答案:

答案 0 :(得分:0)

根据您提到的值,我是否正确理解arguments.form [variables.fieldName]是逗号分隔的列表?如果是这样,那么每个列表项都需要匹配。(顺便说一下,sdkfk364563!@#$%中的#必须定界)。

那么可能的答案是:

if (structKeyExists(arguments.form, variables.fieldName)){
    // Assuming arguments.form[variables.fieldName] is a comma-delimited list
    fieldNameArray=listToArray(arguments.form[variables.fieldName], ',', true);

    for (fieldValue in fieldNameArray) {
        fieldValue=trim(fieldValue);
        if (fieldValue eq "" or REfindNoCase("^[a-zA-Z0-9]*$",fieldValue) eq 0) {
            lstError = listAppend(lstError,nRow);
        }
    }        
}

答案 1 :(得分:-1)

[[:alnum:]]是POSIX语法,可能不支持。使用通用ASCII语法[a-zA-Z0-9]。另外,修改代码以考虑整数的存在并排除任何可能的空格字符。

 if (structKeyExists(arguments.form, variables.fieldName)){
        if (REfindNoCase("^[a-zA-Z0-9]*$",trim(arguments.form[variables.fieldName])) eq 0) {
            lstError = listAppend(lstError,nRow);
        }
 }