我正在尝试修改正则表达式,以便只允许使用空值或字母数字。
我目前有这个,但是它只验证字母数字
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^%^&&
。我不确定该如何解决。
答案 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);
}
}