问题: 我从列表中获取值。 List包含字符串值。 我需要检查列表的值是包含字符值还是仅包含数字。
<#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>
<#assign prcVal2 = (prcVal1?split('&')[0])?trim/>
<#if prcVal2?number gt 99>
<#assign rangeStart = prcVal2?number?string[",000"] + ' &' + prcVal1?split('&')[1]/>
</#if>
<#else>
<#if prcVal1?number gt 99>
<#assign rangeStart = rangeStart + prcVal1?number?string[",000"]/>
<#else>
<#assign rangeStart = rangeStart + prcVal1/>
</#if>
<#if arrIndex == 0>
<#assign rangeStart = rangeStart + '-'/>
</#if>
<#assign arrIndex = arrIndex + 1/>
</#if>
</#list>
${rangeStart}
</#list>
如果prcVal1有&#39;&amp;&#39;它会在&#34; else&#34;条件。
如果prcVal1不包含&#39;&amp;&#39;它转到&#34; else&#34;,但在那之下,我检查了&#34; #if prcVal1?number gt 99
&#34;因为prcVal1包含无法转换为数字的字符,我将收到FTL错误。
id?is_number or ?is_string
我得到的这些建筑条件,但这只检查了一个值的tyoe。
例如:prcVal1="100"
包含数字,但prcVal1?is_number
返回false。
<#assign arr =["0-200000", "200001-500000" ,"500001 & above","test"]/>
<#list arr as prcVal>
<#assign vals= prcVal?split('-')/>
<#assign rangeStart = ""/>
<#assign arrIndex = 0/>
<#list vals as prcVal1>
<#if prcVal1?index_of("& above") gt 0>
<#assign prcVal2 = (prcVal1?split('&')[0])?trim/>
<#if prcVal2?number gt 99>
<#assign rangeStart = prcVal2?number?string[",000"] + ' &' + prcVal1?split('&')[1]/>
</#if>
<#else>
<#if prcVal1?number gt 99>
<#assign rangeStart = rangeStart + prcVal1?number?string[",000"]/>
<#else>
<#assign rangeStart = rangeStart + prcVal1/>
</#if>
<#if arrIndex == 0>
<#assign rangeStart = rangeStart + '-'/>
</#if>
<#assign arrIndex = arrIndex + 1/>
</#if>
</#list>
${rangeStart}
</#list>
由于输入中的测试,上面的代码抛出错误,我需要检查并跳过它。
有人可以建议我一个解决方案来检查值是否包含字符串值或数字。 提前谢谢。
答案 0 :(得分:1)
您可以使用Freemarker builtin replace删除除号码以外的其他字符,例如在您的情况下可以使用
<#assign prcVal1 = prcVal1?replace("[a-zA-Z& ]+", "", "r") />
或使用\D
替换所有非数字字符:
<#assign prcVal1 = prcVal1?replace("[\\D]+", "", "r") />
答案 1 :(得分:1)
目前(2.3.28)你必须使用正则表达式。这将评估为true
或false
,具体取决于pcVal
是否为整数(可选择-
或+
前缀):pcVal?matches(r'[-\+]?[0-9]+')
。请注意,它不会匹配小数(例如1.5
),但我想如果需要,可以从此处进一步扩展正则表达式。