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

问题描述 投票:2回答:3

这是我的代码:

<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>

谢谢你们!

coldfusion logic cfml
3个回答
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答案以了解一种可以稍微压缩代码的方式。


9
投票

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


2
投票

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

我相信这会达到您想要的效果。

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

您不是要寻找一种可能被删除的文件满足任何条件的[[one(即“ OR”的功能)的情况,因为任何文件扩展名都将不等于您3个文件中的至少2个选项。

相反,您正在寻找一种可能被删除的文件满足

all

条件的情况(这是“ AND”的作用。
© www.soinside.com 2019 - 2024. All rights reserved.