我从一个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">
任何建议赞赏
答案 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