内置函数
StyleBook 中的表达式可以使用内置函数。
例如,您可以使用内置函数 str() 将数字转换为字符串。
str($parameters.order)
或者,您可以使用内置函数 int() 将字符串转换为整数。
int($parameters.priority)
以下是 StyleBook 表达式中支持的内置函数列表及其用法示例:
str()
str() 函数将输入参数转换为字符串值。
允许的参数类型:
stringnumberTCP-portbooleanIP address
示例:
-
"set-" + str(10)函数返回"set-10"。 -
str(10)函数返回10。 -
str(1.1.1.1)函数返回1.1.1.1。 -
str(T rue)函数返回"T rue"。 -
str(ADM)函数返回"mas"。
int()
int() 函数将字符串、数字、IP 地址或 tcpport 作为参数,并返回一个整数。
示例:
-
int("10")函数返回10。 -
int(10)函数返回10。 -
int(ip('0.0.4.1'))函数返回1025。
bool()
bool() 函数接受任何类型的参数。如果参数值为 false、空或缺失,则此函数返回 false。
否则,它返回 true。
示例:
-
bool(true)函数返回true。 -
bool(false)函数返回false。 - 如果
$parameters.a为false、空或缺失,则bool($parameters.a)函数返回false。
len()
len() 函数将字符串或列表作为参数,并返回字符串中的字符数或列表中的项目数。
示例 1:
如果您定义替换如下:
items: ["123", "abc", "xyz"]
len($substitutions.items) 函数返回 3。
示例 2:
len("NetScaler ADM") 函数返回 10。
示例 3:
如果 $parameters.vips 的值为 ['1.1.1.1', '1.1.1.2', '1.1.1.3'],则 len($parameters.vips) 函数返回 3。
min()
min() 函数将列表或一系列数字或 tcp-ports 作为参数,并返回最小项。
数字/TCP 端口系列示例:
-
min(80, 100, 1000)函数返回80。 -
min(-20, 100, 400)函数返回-20。 -
min(-80, -20, -10)函数返回-80。 -
min(0, 100, -400)函数返回-400。
数字/TCP 端口列表示例:
-
假设
$parameters.ports是一个tcp-ports列表,其值为[80, 81, 8080]。min($parameters.ports)函数返回80。
max()
max() 函数将列表或一系列数字或 tcp-ports 作为参数,并返回最大项。
数字/TCP 端口系列示例:
-
max(80, 100, 1000)函数返回1000。 -
max(-20, 100, 400)函数返回400。 -
max(-80, -20, -10)函数返回-10。 -
max(0, 100, -400)函数返回100。
数字/TCP 端口列表示例:
-
假设
$parameters.ports是一个tcp-ports列表,其值为[80, 81, 8080]。max($parameters.ports)函数返回8080。
bin()
bin() 函数将数字作为参数,并返回表示该数字二进制格式的字符串。
表达式示例:
bin(100) 函数返回 0b1100100。
oct()
oct() 函数将数字作为参数,并返回表示该数字八进制格式的字符串。
表达式示例:
oct(100) 函数返回 0144。
hex()
hex() 函数将数字作为参数,并返回表示该数字十六进制格式的小写字符串。
表达式示例:
hex(100) 函数返回 0x64。
lower()
lower() 函数将字符串作为参数,并返回相同字符串的小写形式。
示例:
lower("ADM") 函数返回 adm。
upper()
upper() 函数将字符串作为参数,并返回相同字符串的大写形式。
示例:
upper("NetScaler ADM") 函数返回 NetScaler ADM。
sum()
sum() 函数将数字或 tcpports 列表作为参数,并返回列表中数字的总和。
示例 1:
如果您定义替换如下: substitutions:
list-of-numbers = [11, 22, 55]
sum($substitutions.list-of-numbers) 函数返回 88。
示例 2:
如果 $parameters.ports 为 [80, 81, 82],则 sum($parameters.ports) 函数返回 243。
pow()
pow() 函数接受两个数字作为参数,并返回一个数字,该数字表示第一个参数的第二个参数次幂。
示例:
pow(3,2) 函数返回 9。
ip()
ip() 函数将整数、字符串或 IP 地址作为参数,并根据输入值返回 IP 地址。
示例:
-
在
ip函数中指定 IP 地址:ip(3.1.1.1)函数返回3.1.1.1。 -
在
ip函数中指定字符串:ip('2.1.1.1')函数返回2.1.1.1 -
在
ip函数中指定整数:-
ip(12)函数返回0.0.0.12。 -
当您在
ip函数中将整数指定为字符串时,它会返回输入的等效 IP 地址。ip('1025')函数返回0.0.4.1。
此函数还支持整数加法和减法运算,并返回结果 IP 地址。
-
加法:
ip(1025) + ip(12)函数返回0.0.4.13。 -
减法:
ip('1025') - ip(12)函数返回0.0.3.245。 -
组合加法和减法:
ip('1.1.1.1') + ip('1.1.1.1') – ip(2)返回2.2.2.0。
-
base64.encode()
base64.encode() 函数接受字符串参数,并返回 base64 编码的字符串。
示例:
base64.encode("abcd") 函数返回 YWJjZA==。
base64.decode()
base64.decode 函数接受 base64 编码的字符串作为参数,并返回解码后的字符串。
示例:
base64.decode("YWJjZA==") 函数返回 abcd。
exists()
exists() 函数接受任何类型的参数并返回布尔值。如果输入有任何值,则返回值为 True。如果输入参数没有值(即无值),则返回值为 False。
假设 $parameters.monitor 是一个可选参数。如果您在创建配置包时为此参数提供值,则 exists($parameters.monitor) 函数返回 True。
否则,它返回 False。
filter()
filter() 函数接受两个参数。
参数 1:一个替换函数,它接受一个参数并返回一个布尔值。
参数 2:一个列表。
该函数返回原始列表的一个子集,其中每个元素在传递给第一个参数中的替换函数时都评估为 True。
示例:
假设我们已定义替换函数如下。
Substitutions:
x(a): $a != 81
如果输入值不等于 81,则此函数返回 True。否则,它返回 False。
假设 $parameters.ports 为 [81, 80, 81, 89]。
filter($substitutions.x, $parameters.ports) 通过从列表中删除所有 81 的出现项来返回 [80, 89]。
if-then-else()
if-then-else() 函数接受三个参数。
参数 1:布尔表达式
参数 2:任何表达式
参数 3:任何表达式(可选)
如果参数 1 中的表达式评估为 True,则函数返回作为参数 2 提供的表达式的值。
否则,如果提供了参数 3,则函数返回参数 3 中表达式的值。
如果未提供参数 3,则函数返回 no。
示例 1:
如果 $parameters.servicetype 的值为 HTTP,则 if-then-else($parameters.servicetype == HTTP, 80, 443) 函数返回 80。否则,该函数返回 443。
示例 2:
如果 $parameters.servicetype 的值为 HTTP,则 if-then-else($parameters.servicetype == HTTP, $parameters.hport, $parameters.sport) 函数返回 $parameters.hport 的值。
否则,该函数返回 $parameters.sport 的值。
示例 3:
如果 $parameters.servicetype 的值为 HTTP,则 if-then-else($parameters.servicetype == HTTP, 80) 返回 80。
否则,该函数不返回任何值。
join()
join() 函数接受两个参数:
参数 1:数字、tcp-ports、字符串或 IP 地址列表
参数 2:分隔符字符串(可选)
此函数将作为参数一提供的列表元素连接成一个字符串,其中每个元素由作为参数二提供的分隔符字符串分隔。如果未提供参数二,则列表中的元素将连接成一个字符串。
示例:
-
$parameters.ports为[81, 82, 83]。-
带分隔符参数:
join($parameters.ports, '-')函数返回81-82-83。 -
不带分隔符参数:
join($parameters.ports)函数返回818283。
-
split()
split() 函数根据指定的分隔符将输入字符串拆分为多个列表。如果未指定分隔符或指定为空白 (''),则此函数将空格视为分隔符并将字符串拆分为列表。
示例:
-
split('Example_string_split', 's')函数返回['Example_','tring_','plit']。 -
split('Example string split')函数返回['Example','string','split']。 -
split('Example string split', '')函数返回['Example','string','split']。 -
split('Example string')函数返回['Example','string']。此函数将连续空格视为一个空格。
map()
map() 函数接受两个参数;
参数 1:任何函数
参数 2:元素列表。
该函数返回一个列表,其中列表中的每个元素都是将 map() 函数(参数一)应用于参数二中相应元素的结果。
参数 1 中允许的函数:
-
接受一个参数的内置函数:
base64.encode, base64.decode, bin, bool, exists, hex, int, ip, len, lower, upper, oct, quotewrap, str, trim, upper, url.encode, url.decode -
接受至少一个参数的替换函数。
示例:
假设 $parameters.nums 为 [81, 82, 83]。
-
使用内置函数 str 进行映射
map(str, $parameters.nums)函数返回["81", "82", "83"]。map 函数的结果是字符串列表,其中每个元素字符串都是通过将 str 函数应用于输入列表 (
$parameters.nums) 中的相应元素来计算的。 -
使用替换函数进行映射
-
替换:
add-10(port): $port + 10 -
表达式:
map($substitutions.add-10, $parameters.nums)函数返回一个数字列表:[ 91, 92, 93 ]。
-
此 map 函数的结果是一个数字列表,其中每个元素都是通过将替换函数 $substitutions.add-10 应用于输入列表 ($parameters.nums) 中的相应元素来计算的。
quotewrap()
quotewrap() 函数将字符串作为参数,并在输入值前后添加双引号字符后返回一个字符串。
示例:
quotewrap("ADM") 函数返回 "mas"。
replace()
replace() 函数接受三个参数:
参数 1:字符串
参数 2:字符串或列表
参数 3:字符串(可选)
该函数将参数一中所有出现的参数二替换为参数三。
如果未提供参数三,则参数一中所有出现的参数二都将被删除(换句话说,替换为空字符串)。
将子字符串替换为另一个子字符串:
-
replace('abcdef', 'def', 'xyz')函数返回abcxyz。所有出现的
def都替换为xyz。 -
replace('abcdefabc', 'def')返回abcabc。由于没有第三个参数,
def将从结果字符串中删除。
指定要替换字符串中的字符列表。
$parameters.spl_chars = ['@', '#', '!', '%']
此列表包含必须在输入字符串中替换的值。
replace('An#example@to%replace!characters', $parameters.spl_chars, '_') 函数返回 An_example_to_replace_characters。
输出字符串具有下划线 (_),而不是 $parameters.spl_chars 列表中指定的字符。
trim()
trim() 函数返回一个字符串,其中输入字符串的前导和尾随空格已被去除。
示例:
trim(' abc ') 函数返回 abc。
truncate()
truncate() 函数接受两个参数:
参数 1:字符串
参数 2:数字
该函数返回一个字符串,其中参数一中的输入字符串被截断为参数二指定的长度。
示例:
truncate('NetScaler ADM', 6) 返回 Citrix。
distinct()
distinct() 函数从列表输入中提取唯一项。
示例:
如果 $parameters.input_list 为 ['ADM', 'ADC', 'VPX', 'ADC', 'ADM', 'CPX'],则 distinct($parameters.input_list) 函数返回 ['ADM', 'ADC', 'VPX', 'CPX']。
url.encode()
url.encode() 函数返回一个字符串,其中字符根据 RFC 3986 使用 ASCII 字符集进行转换。
示例:
url.encode("a/b/c") 函数返回 a%2Fb%2Fc。
url.decode()
url.decode() 函数返回一个字符串,其中 URL 编码的参数根据 RFC 3986 解码为常规字符串。
示例:
url.decode("a%2Fb%2Fc") 函数返回 a/b/c。
is-ipv4()
is-ipv4() 函数将 IP 地址作为参数,如果 IP 地址为 IPv4 格式,则返回布尔值 True。
is-ipv4(10.10.10.10) 函数返回 True。
is-ipv6()
is-ipv6() 函数将 IP 地址作为参数,如果 IP 地址为 IPv6 格式,则返回布尔值 True。
is-ipv6(2001:DB8::) 函数返回 True。
startswith()
startswith() 函数确定字符串是否以给定前缀开头。此函数需要两个强制字符串参数。
startswith(str, sub_str)
当字符串 (str) 以子字符串 (sub_str) 开头时,此函数返回 True。
示例:
-
startswith('Citrix', 'Ci')函数返回True。 -
startswith('Citrix', 'iC')函数返回False。 -
startswith('Citrix', 'Ab')函数返回False。
endswith()
endswith() 函数确定字符串是否以给定后缀结尾。此函数需要两个强制字符串参数。
endswith(str, sub_str)
当字符串 (str) 以子字符串 (sub_str) 结尾时,此函数返回 True。
示例:
-
endswith('Citrix', 'ix')函数返回True。 -
endswith('Citrix', 'Ix')函数返回False。 -
endswith('Citrix', 'ab')函数返回False。
contains()
contains() 函数确定字符串是否包含给定子字符串。此函数需要两个强制字符串参数。
contains(str, sub_str)
当子字符串 (sub_str) 包含在字符串 (str) 中的任何位置时,此函数返回 True。
示例:
-
contains('Citrix', 'tri')函数返回True。 -
contains('Citrix', 'Ci')函数返回True。 -
contains('Citrix', 'ti')函数返回False。
substring()
使用 substring() 函数从字符串中提取子字符串。
substring(str, start_index, end_index)
此函数需要两个强制参数和一个可选整数参数。
-
str(强制) -
start_index(强制) -
end_index(可选)
此函数返回字符串 (str) 中位于指定索引位置之间的子字符串。如果您未指定结束索引位置,则该函数将从开始索引到字符串末尾提取子字符串。
注意 当您指定
end_index时,子字符串不包括end_index位置的字符。
示例:
-
substring('Citrix', 2)函数返回trix。 -
substring('Citrix', 10)函数返回 (")。在此示例中,该函数返回一个空字符串,因为它具有无效的
start_index位置。 -
substring('Citrix', 2, 4)函数返回tr。在此示例中,该函数提取 2 到 4 索引位置之间的字符。
-
substring('Citrix', -3)函数返回rix。如果要提取字符串末尾的字符,请为
start_index参数指定负值。在此示例中,该函数提取包含字符串中最后三个字符的子字符串。
在本文中
- str()
- int()
- bool()
- len()
- min()
- max()
- bin()
- oct()
- hex()
- lower()
- upper()
- sum()
- pow()
- ip()
- base64.encode()
- base64.decode()
- exists()
- filter()
- if-then-else()
- join()
- split()
- map()
- quotewrap()
- replace()
- trim()
- truncate()
- distinct()
- url.encode()
- url.decode()
- is-ipv4()
- is-ipv6()
- startswith()
- endswith()
- contains()
- substring()