FTL:如何检查字符串类型的值是否包含数字或字符
FTL : How to check whether a value in string type contains number or characters
问题:
我从列表中获取一个值。
列表包含一个字符串值。
我需要检查列表的值是否包含字符值或仅包含数字。
<#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 有“&”,则在列表内,否则在 "else" 条件下。
如果 prcVal1 不包含“&”,它会转到 "else",但在那下面我检查了“#if prcVal1?number gt 99
”,因为 prcVal1 包含无法转换为数字的字符,我得到FTL 错误。
id?is_number or ?is_string
我得到了这些内置条件,但这只检查了一个值的类型。
例如:prcVal1="100"
包含数字,但 prcVal1?is_number
returns 为假。
<#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>
以上代码因输入测试而抛出错误,我需要检查并跳过它。
任何人都可以建议我一个解决方案来检查一个值是否具有字符串值或数字。
提前致谢。
您可以使用 Freemarker 的 builtin replace,它将删除除数字以外的其他字符,例如在您的情况下,这可以适合
<#assign prcVal1 = prcVal1?replace("[a-zA-Z& ]+", "", "r") />
或使用 \D
:
替换所有非数字字符
<#assign prcVal1 = prcVal1?replace("[\D]+", "", "r") />
目前 (2.3.28) 您必须使用正则表达式。这将评估为 true
或 false
,具体取决于 pcVal
是否为整数(可选地带有 -
或 +
前缀):pcVal?matches(r'[-\+]?[0-9]+')
.请注意,它不匹配小数(如 1.5
),但我想如果需要,您可以从这里进一步扩展正则表达式。
问题: 我从列表中获取一个值。 列表包含一个字符串值。 我需要检查列表的值是否包含字符值或仅包含数字。
<#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 有“&”,则在列表内,否则在 "else" 条件下。
如果 prcVal1 不包含“&”,它会转到 "else",但在那下面我检查了“#if prcVal1?number gt 99
”,因为 prcVal1 包含无法转换为数字的字符,我得到FTL 错误。
id?is_number or ?is_string
我得到了这些内置条件,但这只检查了一个值的类型。
例如:prcVal1="100"
包含数字,但 prcVal1?is_number
returns 为假。
<#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>
以上代码因输入测试而抛出错误,我需要检查并跳过它。
任何人都可以建议我一个解决方案来检查一个值是否具有字符串值或数字。 提前致谢。
您可以使用 Freemarker 的 builtin replace,它将删除除数字以外的其他字符,例如在您的情况下,这可以适合
<#assign prcVal1 = prcVal1?replace("[a-zA-Z& ]+", "", "r") />
或使用 \D
:
<#assign prcVal1 = prcVal1?replace("[\D]+", "", "r") />
目前 (2.3.28) 您必须使用正则表达式。这将评估为 true
或 false
,具体取决于 pcVal
是否为整数(可选地带有 -
或 +
前缀):pcVal?matches(r'[-\+]?[0-9]+')
.请注意,它不匹配小数(如 1.5
),但我想如果需要,您可以从这里进一步扩展正则表达式。