Coldfusion 如何在cfif语句中放置多个NOT条件?

Coldfusion 如何在cfif语句中放置多个NOT条件?,coldfusion,logic,cfml,Coldfusion,Logic,Cfml,这是我的代码: <cfif (CFFILE.FileSize GT (4194304))> Delete File <cfelseif CFFILE.serverFileExt neq "png" > Delete File <cfelse> It's ok </cfif> 删除文件 删除文件 没关系 我想添加“jpg”和“jpeg”作为允许的文件类型。我试过了,但没有成功 <cfif (CFFILE.FileSize GT (419

这是我的代码:

<cfif (CFFILE.FileSize GT (4194304))>
Delete File
<cfelseif CFFILE.serverFileExt neq "png"  >
Delete File
<cfelse>
It's ok
</cfif>

删除文件
删除文件
没关系
我想添加“jpg”和“jpeg”作为允许的文件类型。我试过了,但没有成功

<cfif (CFFILE.FileSize GT (4194304))>
Delete File
<cfelseif ( ( CFFILE.serverFileExt neq "png" ) OR ( CFFILE.serverFileExt neq "jpg" ) OR ( CFFILE.serverFileExt neq "jpeg" ) ) >
Delete File
<cfelse>
It's ok
</cfif>

删除文件
删除文件
没关系
有什么想法吗

解决方案:

我的OR声明需要是一个,谢谢你,Miguel-F,随着Busches的改进,这是最终结果:

<cfif (CFFILE.FileSize GT (4194304))>
    Delete File
<cfelseif NOT ListFindNoCase("jpg,jpeg,png", CFFILE.serverFileExt)>
    Delete File
<cfelse>
    It's ok
</cfif>

删除文件
删除文件
没关系

谢谢大家

您的代码语法正确,但逻辑有缺陷。该条件将始终为真,因为您正在使用
。一旦其中一个条件为真,该条件即通过。尝试使用
,如下所示:

<cfif (CFFILE.FileSize GT (4194304))>
    Delete File
<cfelseif (CFFILE.serverFileExt NEQ "png") AND (CFFILE.serverFileExt NEQ "jpg") AND (CFFILE.serverFileExt NEQ "jpeg")>
    Delete File
<cfelse>
    It's ok
</cfif>

删除文件
删除文件
没关系

如果您使用ColdFusion函数,请参阅Busches answer,了解如何将代码压缩一点。

我认为代码中的问题只是在语句中使用了“或”。如果我读对了你的样本,它每次都会删除这个文件

我相信这会产生你想要的效果

<cfelseif ( ( CFFILE.serverFileExt neq "png" ) 
       AND ( CFFILE.serverFileExt neq "jpg" ) 
       AND ( CFFILE.serverFileExt neq "jpeg" ) ) >

您不会寻找可能被删除的文件满足任何一个条件(即“或”所满足的条件)的情况,因为任何文件扩展名都将不等于3个选项中的至少2个


相反,您正在寻找一种可能被删除的文件满足所有条件的情况(这就是“AND”的作用。

正如Miguel-F所说,您的问题是您需要使用
而不是
。在这种情况下,我还建议切换到使用
ListFindNoCase()
而不是使用多个
或/和
语句

<cfif CFFILE.FileSize GT 4194304> <!--- You also don't need all those () here --->
    Delete File
<cfelseif NOT ListFindNoCase( "png,jpg,jpeg", cffile.ServerFileExt )>
    Delete File
<cfelse>
    It's ok
</cfif>

删除文件
删除文件
没关系

ListFindNoCase
更简洁,更易于阅读和维护。

使用,而不是使用或当他的问题不在使用
时,我还建议他切换到
!ListFind(“png,jpg,jpeg”,cffile.ServerFileExt)
而不是一遍又一遍地写同样的条件。@Busches把它写下来作为一个答案。更容易阅读和维护。我会投票给upI,我会用一个例子更新我的答案,但如果@Busches把它作为一个答案添加,我会把它从我的答案中删除。Miguel-F我是按照@Travis的建议做的。我会使用
ListFindNoCase
来忽略case灵敏度。+1。一旦超过两个值/条件,列表函数通常更具可读性。