freeMarker模板语言参考:内建函数参考①字符串内建函数

字符串内建函数

1.boolean
字符串转为布尔值。字符串必须是 true 或 false (大小写敏感!),

或者必须是由 boolean_format 设置的特定格式。

如果字符串不是适当的格式,那么当访问该内建函数时, 就会发成错误终止模板处理。

2.cap_first
字符串中的首单词的首字母大写
${"  green mouse"?cap_first}
${"GreEN mouse"?cap_first}
<#--  In the case of "- green mouse", the first word is the -.  -->
${"- green mouse"?cap_first}

在这里插入图片描述

3.capitalize
字符串中的首单词的首字母大写
${"  green  mouse"?capitalize}
${"GreEN mouse"?capitalize}

在这里插入图片描述

4.chop_linebreak
在末尾没有 换行符 的字符串, 那么可以换行,否则不改变字符串
5.contains
如果函数中的参数指定的子串出现在源字符串中, 那么返回true
<#if "piceous"?contains("ice")>
    <font color="green">It contains "ice"</font>
</#if>

${"piceous"?contains("ice")?string}

在这里插入图片描述

6.date, time, datetime
字符串转换成日期值,时间或日期-时间值。

需要一个由 date_format, time_format 和 datetime_format 设置指定的格式。

如果字符串不是适当的格式,那么当访问该内建函数时, 就会发生错误中止模板的处理

<#assign date1="2009-10-12"?date("yyyy-MM-dd")>
<#assign date2="9:28:20"?time("HH:mm:ss")>
<#assign date3=" 2009-10-12 9:28:20"?datetime("yyyy-MM-dd HH:mm:ss")> 
 <#--  结果为2009-10-12  -->
${date1} 
<#--  结果为9:28:20  -->
${date2} 
 <#--  结果为2009-10-12 9:28:20  -->
${date3} 
<#--  中文手册:http://freemarker.foofun.cn/ref_builtins_string.html#ref_builtin_string_date  -->
<#assign someDate = "1995-10-25"?date.xs>
${someDate}
<#assign someTime = "15:05:30"?time.xs>
${someTime}
<#assign someDatetime = "1995-10-25T15:05:00"?datetime.xs>
${someDatetime}

在这里插入图片描述

7.ends_with
返回是否这个字符串以参数中指定的子串结尾

比如 “ahead”?ends_with(“head”) 返回布尔值 true。
“head”?ends_with(“head”) 也返回 true

<#--  true  -->
${"ahead"?ends_with("head")?string}
<#--  true  -->
${"string"?ends_with("ing")?string}
8.ensure_ends_with
如果字符串没有以第一个参数指定的子串开头, 那么就会将它加到字符串开头,否则返回原字符串。

比如, “foo”?ensure_starts_with("/") 和 “/foo”?ensure_starts_with("/") 返回 “/foo”

<#--  /foo  -->
${"foo"?ensure_starts_with("/")?string}
<#--  :/foo  -->
${"/foo"?ensure_starts_with(":")?string}

8.groups
这个函数只作用于内建函数 matches 的结果"
9.matches
???????????? 这是一个"超级用户"函数。如果不懂 正则表达式,就忽略它吧。

该内建函数决定了字符串是否精确匹配模式。而且,它会返回匹配子串的列表。
返回值是多类型值:

布尔值:如果字符串整体匹配了模式,就是 true, 否则就是 false。
比如:“fooo”?matches(‘fo*’) 就是 true,但是 “fooo bar”?matches(‘fo*’) 是 false。

序列:字符串匹配的子串的列表。很有可能是长度为0的序列

<#if "fxo"?matches("f.?o")>Matches.<#else>Does not match.</#if>

<#assign res = "foo bar fyo"?matches("f.?o")>
<#if res>Matches.<#else>Does not match.</#if>
Matching sub-strings:
<#list res as m>
- ${m}
</#list>
10.html
字符串按照HTML标记输出面字符串将会被替代:
< 替换为 &lt;
> 替换为 &gt;
& 替换为 &amp;
" 替换为 &quot;
' 被替换为 &#39;
请注意,如果想安全地插入一个属性, 
必须在HTML模板中使用引号标记(是 ",而不是 ')为属性值加引号
11.index_of
返回第一次字符串中出现子串时的索引位置
<#--  1  -->
${"abcabcgbbc"?index_of("bc")}
<#--  指定开始搜索的索引位置  -->
${"abcabcgbbc"?index_of("bc",2)}
<#--  当指定开始搜索的索引位置是-1的时候效果和0相同  -->
${"abcabcgbbc"?index_of("bc",-1)}
<#--  如果第一个参数作为子串没有在该字符串中出现时 
(如果你使用了第二个参数,那么就从给定的序列开始),那么就返回-1  -->
${"abcabcgbbc"?index_of("e")}

在这里插入图片描述

12.j_string
根据Java语言字符串转义规则来转义字符串, 所以它很安全的将值插入到字符串类型中。

要注意它 不会 在被插入的值的两侧添加引号;
你需要在字符串值 内部 来使用

<#assign beanName = 'The "foo" bean.'>
String BEAN_NAME = "${beanName?j_string}";

在这里插入图片描述

13.json_string
根据JSON语言的字符串规则来转义字符串, 所以在字符串中插入值是安全的。

要注意它 不会 在被插入的值两侧添加引号;
你需要在字符串值 内部 来使用。
这不会转义 ’ 字符,因为JSON字符串必须使用 " 来括起来

Freemarker输出json和java字符串以及javascript代码转义
Java 语言规则的字符串转义:${content?j_string}

JavaScript 语言规则的字符串转义:${content?js_string}

JSON 规则的字符串转义:${content?json_string}
14.keep_after
移除字符串中的一部分内容,该部分是给定子串第一次出现之前的部分(出现的在给的后面,而且是第一次出现的前面的内容)

如果参数字符串没有找到,它会返回空串。
如果参数是长度为0的字符串, 它会返回源字符串,不会改变。

该方法接受可选的 标志位参数,作为它的第二个参数

 	<#--  fgh  -->
    ${"abcdefgh"?keep_after("de")}
    <#--  当定义的字符串没有在原来字符串中出现要返回空字符串  -->
    <#--  什么都没有  -->
    ${"abcdefgh"?keep_after("zz")}
    <#--  该方法接受可选的 标志位参数,作为它的第二个参数  -->
    <#--  bar  -->
    ${"foo : bar"?keep_after(r"\s*:\s*", "r")}
15.keep_after_last
它会保留参数最后一次出现后的部分(所以应该是出现的在给的后面,而且是最后一次出现的后面的内容)
<#--  txt  -->
${"foo.bar.txt"?keep_after_last(".")}
<#--  bar.txt  -->
${"foo.bar.txt"?keep_after(".")}
16.keep_before
移除字符串的一部分,该部分是从给定子串开始的部分(所以应该是出现的在给的前面)

如果参数字符串没有找到,它会返回源字符串,不会改变。
如果参数是长度为0的字符串,它会返回空串

<#--  abc   -->
${"abcdef"?keep_before("de")}
<#--  该方法接受可选的 标志位参数,作为它的第二个参数  -->
<#--  foo  -->
${"foo : bar"?keep_before(r"\s*:\s*", "r")}
17.keep_before_last
保留参数最后一次出现之前的部分,而不是第一次出现之前(所以应该是出现的在给的前面,而且是最后一次出现的前面内容)
<#--  txt   -->
${"foo.bar.txt"?keep_after_last(".")}
<#--  foo  -->
${"foo.bar.txt"?keep_before(".")}
18.last_index_of
返回最后一次(最右边)字符串中出现子串时的索引位置。

它返回子串第一个(最左边)字符所在位置的索引

<#--  3  -->
${"abcabc"?last_index_of("ab")}
<#--  注意第二个参数暗示了子串开始的最大索引  -->
<#--  0  -->
${"abcabc"?last_index_of("ab",2)}
<#--  3  -->
${"abcabc"?last_index_of("ab",3)}
<#--  如果它是负数,那么效果和是零的一样,
如果它比字符串的长度还大, 那么就和它是字符串长度那个数值是一个效果。
小数会被切成整数  ????????????-->
<#--  -1  -->
${"abcabc"?last_index_of("ab",-1)}
<#--  0  -->
${"abcabc"?last_index_of("ab",0)}
19.left_pad
如果它仅仅用1个参数,那么它将在字符串的开始插入空白, 直到整个串的长度达到参数指定的值。

如果字符串的长度达到指定数值或者比指定的长度还长, 那么就什么都不做了

<#--  如果它仅仅用1个参数,那么它将在字符串的开始插入空白,
 直到整个串的长度达到参数指定的值  -->
[${""?left_pad(5)}]
[${"a"?left_pad(5)}]
[${"ab"?left_pad(5)}]
[${"abc"?left_pad(5)}]
[${"abcd"?left_pad(5)}]
<hr>
<#--  如果字符串的长度达到指定数值或者比指定的长度还长, 那么就什么都不做了  -->
[${"abcde"?left_pad(5)}]
[${"abcdef"?left_pad(5)}]
[${"abcdefg"?left_pad(5)}]
[${"abcdefgh"?left_pad(5)}]
<hr>
<#--  如果使用了两个参数,
那么第一个参数表示的含义和你使用一个参数时的相同, 
第二个参数指定用什么东西来代替空白字符 (类似占位符) -->
[${""?left_pad(5, "-")}]
[${"a"?left_pad(5, "-")}]
[${"ab"?left_pad(5, "-")}]
[${"abc"?left_pad(5, "-")}]
[${"abcd"?left_pad(5, "-")}]
[${"abcde"?left_pad(5, "-")}]
<#--  第二个参数也可以是个长度比1大的字符串。 
那么这个字符串会周期性的插入  -->
[${""?left_pad(8, ".oO")}]
[${"a"?left_pad(8, ".oO")}]
[${"ab"?left_pad(8, ".oO")}]
[${"abc"?left_pad(8, ".oO")}]
[${"abcd"?left_pad(8, ".oO")}]

在这里插入图片描述

20.length
字符串中字符的数量
<#--  5  -->
${"alice"?length}
21.lower_case
字符串的小写形式
<#--  alice   -->
${"ALICE"?lower_case}
<#--  字符串的大写形式  -->
<#--  ALICE  -->
${"alice"?upper_case}
22.number
字符串转化为数字格式

它必须是本地化独立的形式,小数的分隔符就是一个点,没有分组

<#--  111.11  -->
${"111.11"?number}

<#--  1230000  -->
${"1.23E6"?number}
<#--  0  -->
${"1.5e-8"?number}
<#--  �  -->
${"NaN"?number}
<#--  ∞   -->
${"INF"?number}
<#--  -∞   -->
${"-INF"?number}
<#--  ∞   -->
${"Infinity"?number}
<#--  -∞   -->
${"-Infinity"?number}
mX:小数部分最小X位
MX:小数部分最大X位
例子:
<#assign x=2.582/>
<#assign y=4/>
#{x; M2} <#-- 输出2.58 -->
#{y; M2} <#-- 输出4 -->
#{x; m2} <#-- 输出2.58 -->
#{y; m2} <#-- 输出4.00 -->
#{x; m1M2} <#-- 输出2.58 -->
#{y; m1M2} <#-- 输出4.0 -->
23.replace
在源字符串中,用另外一个字符串来替换原字符串中出现它的部分。

它不处理词的边界

替换是从左向右执行的

如果第一个参数是空字符串,那么所有的空字符串将会被替换

<#--  this is a bulldozer abulldozerus  -->
${"this is a car acarus"?replace("car", "bulldozer")}
<#--  替换是从左向右执行的  -->
<#--  Xaa   -->
${"aaaaa"?replace("aaa", "X")}
<#--  如果第一个参数是空字符串,那么所有的空字符串将会被替换  -->
<#--  |f|o|o|  -->
${"foo"?replace("","|")}
24.right_pad
它和 left_pad 相同, 但是它从末尾开始插入字符而不是从开头
[${""?right_pad(5)}]
[${"a"?right_pad(5)}]
[${"ab"?right_pad(5)}]
[${"abc"?right_pad(5)}]
[${"abcd"?right_pad(5)}]
[${"abcde"?right_pad(5)}]
[${"abcdef"?right_pad(5)}]
[${"abcdefg"?right_pad(5)}]
[${"abcdefgh"?right_pad(5)}]
<hr>
<#--  从左向右补充,原有位置上如果有元素怎么本身循环替代的不显示  -->
[${""?right_pad(8, ".oO")}]
[${"a"?right_pad(8, ".oO")}]
[${"ab"?right_pad(8, ".oO")}]
[${"abc"?right_pad(8, ".oO")}]
[${"abcd"?right_pad(8, ".oO")}]

在这里插入图片描述

25.remove_beginning
从字符串的开头移除参数中的子串(把第一次出现这个子串的删除),

如果它不以参数中的子串开头, 那么就或者返回原字符串

<#--  def   -->
${"abcdef"?remove_beginning("abc")}
<#--  1abc1def  -->
${"abc1abc1def"?remove_beginning("abc")}
<#--  foobar  -->
${"foobar"?remove_beginning("abc")}
26.remove_ending
从字符串的结尾移除参数中的子串,如果它不以参数中的子串结尾, 那么就或者返回原字符串
<#--  abc   -->
${"abcdef"?remove_ending("def")}
<#--  abcabcdef   -->
${"abcabcdefdef"?remove_ending("def")}
<#--  foobar  -->
${"foobar"?remove_ending("def")}
27.rtf
字符串作为富文本(RTF 文本),也就是说,下列字符串:

\ 替换为 \\

{ 替换为 \{

} 替换为 \}
28.split
它被用来根据另外一个字符串的出现将原字符串分割成字符串序列
<#list "someMOOtestMOOtext"?split("MOO") as x>
- ${x}
</#list>

在这里插入图片描述

<#--  假设所有的分隔符都在新项之前出现 (除了使用 "r" 标志 - 后面详细介绍)   -->
<#list "some,,test,text,"?split(",") as x>
- "${x}"
</#list>

在这里插入图片描述

<#--  split 接受可选的 标志位参数, 作为它的第二个参数。
由于历史使用 r (正则表达式)标志的差错;
它会从结果列表中移除空元素, 所以在最后示例中使用 ?split(",", "r"), "" 会从输出中消失  -->
<#list "some,,test,text,"?split(",","r") as x>
- "${x}"
</#list>

在这里插入图片描述

29.starts_with

如果字符串以指定的子字符串开头,那么返回true

<#--  true   -->
${"redirect"?starts_with("red")?string}
<#--  true   -->
${"red"?starts_with("red")?string}
<#--  false  -->
${"redirect"?starts_with("dir")?string}
30.string(当被用作是字符串值时)
string (当被用作是字符串值时) 什么也不做,仅仅返回和其内容一致的字符串。

例外的是, 如果值是一个多类型的值(比如同时有字符串和序列两种),
那么结果就只是一个简单的字符串,而不是多类型的值。
这可以被用来防止人为多输

31.trim
去掉字符串首尾的空格 (${" green mouse "?trim}) ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190807104306607.png)
32.uncap_first
uncap_first和 cap_first 相反。 字符串中所有单词的首字母小写
(${"Green mouse"?uncap_first})
<br>
(${"GREEN MOUSE"?uncap_first})

在这里插入图片描述

33.url
在URL之后的字符串进行转义
<#assign x = 'a/b c'>
${x?url}
<#--  它会转义 所有 保留的URL字符 (/, =, &,等...), 
所以编码可以被用来对查询参数的值进行  -->
<a href="foo.cgi?x=${x?url}&y=${y?url}">Click here...</a>

<#--  为了进行URL转义,必须要选择 字符集,它被用来计算被转义的部分 (%XX)  -->
<#--
  This will use the charset specified by the programmers
  before the template execution has started.
-->
<a href="foo.cgi?x=${x?url}">foo</a>

<#-- Use UTF-8 charset for URL escaping from now: -->
<#setting url_escaping_charset="UTF-8">

<#-- This will surely use UTF-8 charset -->
<a href="bar.cgi?x=${x?url}">bar</a>
<#--  此外,你可以明确地指定一个为单独URL转义的字符集,作为内建函数的参数  -->
<#--  <a href="foo.cgi?x=${x?url('ISO-8895-2')}">foo</a>  -->

在这里插入图片描述
在这里插入图片描述

34.url_path
和 url 内建函数 相同,只是它不转义斜杠 (/)字符。

这就是意味着用来转义使用了斜杠(不是反斜杠!)的路径 (比如操作系统或一些内容仓库的路径),

转义之后它们可以插入到URL中

url_path('utf-8')
35.word_list
包含字符串中所有单词的序列,顺序为出现在字符串中的顺序。

单词是不间断的字符序列,包含了任意字符,但是没有 空白

<#assign words = "   a bcd, .   1-2-3"?word_list>
<#list words as word>[${word}]</#list>

在这里插入图片描述

36.xhtml
< 替换为 &lt;
> 替换为 &gt;
& 替换为 &amp;
" 替换为 &quot;
' 替换为 &#39;
该内建函数和 xml 内建函数的唯一不同是 xhtml内建函数转义 ' 为 &#39;,
而不是 &apos;, 
因为一些老版本的浏览器不能正确解释 &apos;。
37.xml
< 替换为 &lt;
> 替换为 &gt;
& 替换为 &amp;
" 替换为 &quot;
' 替换为 &apos;
38.通用标志
很多字符串内建函数接受可选的字符串参数, 它们被称为"标志"。

在这个字符串中,每个字母影响内建函数一个特定方面的行为。

比如,字母 i 说明内建函数不应该区别相同字母的小写和大写变化。
标志字符串中的字母顺序是不重要的

下面是字母(标志)的完整列表:

  • i:大小写敏感: 不区别相同字母的小写和大写变化。

  • f:只是第一个。也就是说, 替换/查找/等…,只是第一个出现的地方。

  • r:查找的子串是 正则表达式。 FreeMarker 使用的正则表达式变量可以在 http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html 中找到(请注意,一些模式规则特性的出现基于所使用的Java版本)。

  • m:正则表达式的多行模式。在多行正则表达式 ^ 和 $ 仅仅匹配之后或之前, 各自匹配行终止符或字符串结尾。默认情况下,这些表达式仅仅匹配完整字符串的开头和结尾。 请注意,^ 和 $ 不匹配换行符字符本身。

  • s:开启正则表达式的dot-all模式 (和Perl的单行模式相同)。在dot-all模式下,表达式 . 匹配任意字符串,包含行终止符。 默认情况下,该表达式不匹配行终止符。

  • c: 允许正则表达式中的空白和注释。

<#assign s = 'foo bAr baar'>
${s?replace('ba', 'XY')}
<br>
i: ${s?replace('ba', 'XY', 'i')}
<br>
if: ${s?replace('ba', 'XY', 'if')}
<br>
r: ${s?replace('ba*', 'XY', 'r')}
<br>
ri: ${s?replace('ba*', 'XY', 'ri')}
<br>
rif: ${s?replace('ba*', 'XY', 'rif')}

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值