【问题标题】:How to update regex to allow empty value or alphanumeric only如何更新正则表达式以仅允许空值或字母数字
【发布时间】:2019-07-05 23:56:13
【问题描述】:

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

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

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^%^&&。我不知道如何解决这个问题。

【问题讨论】:

  • 仅限字母数字并允许空字符串为^[[:alnum:]]*$
  • 但是当添加你给@sln的那个时,它也会验证值是:test123%^&**&^& - 这是错误的
  • 如果^[A-Za-z0-9]*$不起作用,则代码错误。
  • ColdFusion 的哪个版本?
  • Lucee,它不是 ACF

标签: regex coldfusion lucee


【解决方案1】:

根据您提到的值,我是否正确理解 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);
        }
    }        
}

【讨论】:

    【解决方案2】:

    [[: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);
            }
     }
    

    【讨论】:

    • 顺便说一句,我想允许一个空值传递但未验证,但值为:sdkfk364563!@#$%, 那么它应该失败
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 2011-12-29
    • 1970-01-01
    • 2013-11-17
    • 1970-01-01
    相关资源
    最近更新 更多