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

时间:2013-03-14 15:17:19

标签: 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 (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>

有什么想法吗?

SOLUTION:

我的OR声明需要成为AND,谢谢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>

谢谢你们!

3 个答案:

答案 0 :(得分:8)

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

<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更简洁,更易于阅读和维护。注意,如

中所述

答案 1 :(得分:3)

您的代码在语法上是正确的,但逻辑是有缺陷的。由于您使用OR,因此该条件始终为真。只要其中一个条件成立,条件就会过去。请尝试使用AND,如下所示:

<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 ListFindNoCase()函数,请参阅Busches答案,以便稍微压缩您的代码。

答案 2 :(得分:2)

我认为代码中的问题只是在语句中使用“OR”。如果我正确读取您的样本,则每次都会删除该文件。

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

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

您不是在寻找可能被删除的文件满足条件的任何一个的情况(这是“OR”所做的),因为任何文件扩展名至少不等于3个选项中的2个。

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