如何用FTL检查列表中字符串值是否含字符或仅为数字
处理价格区间并判断纯数字/含字符的FreeMarker实现
我来帮你完善这段处理价格区间的FreeMarker代码,同时实现你需要的判断每个区间值(或拆分后的部分)是仅由数字组成,还是包含非数字字符的逻辑。
完整代码实现
<#assign arr =["0-200000", "200001-500000" ,"500001 & above"]/> <#list arr as prcVal> <#assign vals= prcVal?split('-')/> <#assign rangeStart = ""/> <#assign arrIndex = 0/> <#list vals as prcVal1> <#if prcVal1?index_of("& above") gt 0> <#-- 处理带字符描述的区间(如"500001 & above") --> <#assign prcVal2 = (prcVal1?split('&')[0])?trim/> <#-- 判断提取的数字部分是否为纯数字 --> <#if prcVal2?matches("^\\d+$")> <p>提取的数字部分 <strong>"${prcVal2}"</strong> 仅由数字组成</p> <#else> <p>提取的部分 <strong>"${prcVal2}"</strong> 包含非数字字符</p> </#if> <p>完整区间: <em>${prcVal}</em>(包含字符描述)</p> <#else> <#-- 处理普通数字区间段 --> <#if prcVal1?matches("^\\d+$")> <p>区间段 <strong>"${prcVal1}"</strong> 仅由数字组成</p> <#else> <p>区间段 <strong>"${prcVal1}"</strong> 包含非数字字符</p> </#if> <#-- 组合完整区间(仅针对普通数字区间) --> <#if arrIndex == 0> <#assign rangeStart = prcVal1/> <#else> <p>完整区间: <em>${rangeStart} - ${prcVal1}</em>(纯数字区间)</p> </#if> </#if> <#assign arrIndex = arrIndex + 1/> </#list> <hr/> </#list>
关键逻辑说明
- 纯数字判断:使用FreeMarker的
?matches指令结合正则表达式^\\d+$,这个规则表示字符串从开头到结尾完全由数字组成,没有任何非数字字符。 - 特殊区间处理:针对带
& above的区间,先通过?split('&')拆分出数字部分,再用?trim去除前后空格,最后做纯数字校验。 - 遍历与状态维护:用
arrIndex变量记录当前拆分后的区间段索引,用来组合普通数字区间的首尾值。
扩展调整
如果你的价格区间可能包含带千分位逗号的数字(如100,000),可以调整纯数字判断的正则为^\\d+(,\\d+)*$,或者先去除逗号再判断:
<#assign cleanedVal = prcVal1?replace(",", "")/> <#if cleanedVal?matches("^\\d+$")> <!-- 处理逻辑 --> </#if>
内容的提问来源于stack exchange,提问作者Priyanka S
相关产品推荐
相关产品推荐

