在CFIF声明之间

时间:2015-03-07 07:08:47

标签: coldfusion cfml

我从一个formset发送一个逗号分隔的列表,除了第一个之外,每个可能的选定项目只有在未选择第一个时才能添加。

QUANTY = 10-1 下,1-0,2-0,3-0,4-0,5-0,7-0,6-0,8-0,9- 0,15-0,13-0

列表中的每个元素都是数字,连字符和另一个数字。第一个数字是产品编号,第二个是数量。

如果列表中的第一个元素是10-1,则无法添加任何其他项目,因此它们必须是3-0中的数字-0。

如果任何其他元素包含-1

,则此语句有效
 <cfif ListFirst(QUANTY) IS "10-1" AND ListRest(QUANTY) contains "-1">
    <tr>
        <td align="center">
            <font color="#FF0000"><strong>
            You cannot add any features to the Basic Plan<p>
            Please click "Back" and reset your order.
            </strong></font>
        </td>
    </tr>
    <cfabort>
    </cfif>

当选择大于1的数量时会出现问题:

QUANTY = 10-1 下,1-0,2-0,3-0,4-0,5-0,7-0,6-0,的 8-4 下,9-0,15-0,13-0

我似乎无法在我的cfif语句中使用“Between”函数:

 AND ListRest(QUANTY) contains "-1">

如:

 AND ListRest(QUANTY) BETWEEN "-1" and "-50">

任何建议赞赏

4 个答案:

答案 0 :(得分:3)

ListRest(quanty) contains "1"

将在诸如“1-0”之类的值上返回true。这显然不是你想要的。

我建议将字符串视为嵌套列表。外部列表以逗号分隔,内部以连字符分隔。这种方法应该有效

<cfif ListLast(ListFirst, Quanty, ","), "-") gt "0">
loop through the rest of Quanty and use ListLast to check 
the values after the hyphen
<cfelse>
code for this condition
</cfif>

答案 1 :(得分:0)

我尝试了上面的脚本,并在...

上出错了

我写了这个,似乎工作正常:

 <cfset qty1 = "#ListFirst(QUANTY)#">
 <cfset qty2 = ListLast(qty1, "-")>
 <cfif (qty2 GT 0) AND  
   ((ListRest(QUANTY) contains "-1") OR 
   (ListRest(QUANTY) contains "-2") OR 
   (ListRest(QUANTY) contains "-3") OR 
   (ListRest(QUANTY) contains "-4") OR 
   (ListRest(QUANTY) contains "-5") OR 
   (ListRest(QUANTY) contains "-6") OR 
   (ListRest(QUANTY) contains "-7") OR 
   (ListRest(QUANTY) contains "-8") OR 
   (ListRest(QUANTY) contains "-9"))>

   do this
 </cfif>

谢谢,如果有更短的写作方式,我会很感激输入。

答案 2 :(得分:0)

您的解决方案应该可行,但正则表达式可能更优雅。

<cfif ListFirst(QUANTY) is "10-1" and REFind("-[1-9]",ListRest(QUANTY))>

Do something

</cfif>

应该有效。 Reg表达式非常有用。如果您之前没有使用它们,则上面的那个会查找一个破折号,后跟一个从1到9的数字。

答案 3 :(得分:0)

我建议只使用正则表达式(不需要进行列表操作来检查模式是否存在):

<cfif REFind("^[0-9]+-[1-9].+-[1-9]", QUANTITY)>
    <tr>
        <td align="center">
            <font color="#FF0000"><strong>
            You cannot add any features to the Basic Plan<p>
            Please click "Back" and reset your order.
            </strong></font>
        </td>
    </tr>
    <cfabort>
</cfif>

测试了以下内容:

"10-1,1-0,2-0,3-0,4-0,5-0,7-0,6-0,8-0,9-0,15-0,13-0"  no match (pass)
"10-0,1-5,2-0,3-0,4-0,5-0,7-0,6-0,8-0,9-0,15-0,13-0"  no match

"9-1,1-5,2-0,3-0,4-0,5-0,7-0,6-0,8-0,9-0,15-0,13-0"   match (fail)
"10-1,1-5,2-0,3-0,4-0,5-0,7-0,6-0,8-0,9-0,15-0,13-0"  match
"11-1,1-5,2-0,3-0,4-0,5-0,7-0,6-0,8-0,9-0,15-0,13-0"  match
"10-1,1-0,2-0,3-0,4-0,5-0,7-5,6-0,8-0,9-0,15-0,13-0"  match