我正在将结构传递给req的函数。字段验证,但我首先检查我的结构是否为空。
如果我结构中的所有元素都是空的(emptry string),我不会将此结构传递给验证。
我用StructIsEmpty
来检查我的结构。问题是,当我的Structure的元素只包含空字符串时,StructIsEmpty
返回NO
。不幸的是我还在 CF8 。
当所有结构元素只有空字符串时,如何让StructIsEmpty
返回YES
?
<cfset st_MyStruct=StructNew()>
<cfset st_MyStruct["InstType"]="#Trim(arr[112])#">
<cfset st_MyStruct["InstId"]="#Trim(arr[113])#">
<cfset st_MyStruct["PLN"]="#Trim(arr[115])#">
<cfset st_MyStruct["PFN"]="#Trim(arr[116])#">
<cfset st_MyStruct["Referal"]="#Trim(arr[118])#">
cfif StructIsEmpty(st_MyStruct) NEQ "NO">
<CFINVOKE component="cfcomponents.ValidateFields" method="CheckReqFields"
st_MyStruct="#st_MyStruct#"
Inst="#arguments.Inst#" >
</cfif>
答案 0 :(得分:1)
structFieldsAreEmpty
变量是否为真,如果确实如此,那么您的结构是否包含所有空值。如果您的struct返回多个条目,则需要修改此代码
<cfset st_MyStruct = {}>
<cfset st_MyStruct["InstType"] = ''>
<cfset st_MyStruct["InstId"] = ''>
<cfset st_MyStruct["PLN"] = ''>
<cfset st_MyStruct["PFN"] = ''>
<cfset st_MyStruct["Referal"] = ''>
<cfset structFieldsAreEmpty = checkStructValuesEmpty(st_MyStruct) />
<cffunction name="checkStructValuesEmpty" access="private" returntype="boolean" output="false">
<cfargument name="myStruct" type="struct" required="true">
<cfloop collection="#arguments.myStruct#" index="i">
<cfif len(trim(arguments.myStruct[i]))>
<cfreturn false>
</cfif>
</cfloop>
<cfreturn true>
</cffunction>
答案 1 :(得分:0)
如果你想在一行中执行此操作,可以将结构序列化为JSON,并使用正则表达式搜索任何非空字符串值,如下所示:
structIsEmptyStrings = refind(':("[^"]+"|\d+|true|false)', serializeJSON(st_MyStruct)) == 0;
正则表达式正在寻找任何非空字符串(""
),数字或布尔值(true
或false
)的值。请记住,如果struct中的任何值都是string,numeric或boolean之外的任何类型(不检查嵌套数组或结构),则这将不准确。此外,如果任何字符串值只是空格,则会认为该结构不为空(可能不是您要查找的内容)。