DataScript 中提供了以下字符串函数:

字符串

描述

string.beginswith((source, target)

在字符串开头搜索字符串。

string.contains(source, target)

搜索在一个字符串中包含的另一个字符串。

string.endswith(source, target)

在字符串末尾搜索字符串。

string.len(source)

返回字符串中的字符数。

string.lower (source)

将字符串更改为小写。

string.split(source_string, delimiter)

将一个字符串解析为多个子字符串。

string.sub(source, begin, [end])

从字符串中提取子字符串。

string.upper(string.upper( source )

将字符串更改为大写。

string.beginswith

函数

string.beginswith(source, target)

描述

检查源字符串是否以目标字符串开头。

事件

全部。

参数

source 是要检查的字符串。

target 是源要与之匹配的字符串。

返回

如果源字符串以目标字符串开头,则返回布尔值 true,否则返回 false

示例

如果路径以 /sales/ 开头,收将重定向到新 URL。

path = avi.http.get_path()
if string.beginswith(path, "/sales/") then
   avi.http.redirect("http://sales.test.com/index.html")
end

string.contains

函数

string.contains(source, target)

描述

检查源字符串是否包含目标字符串。

事件

全部。

参数

source 是要检查的字符串。

target 是源要与之匹配的字符串。

返回

如果源字符串包含目标字符串,则返回布尔值 true,否则返回 false

示例

如果路径包含 /finance/,则提示客户端进行身份验证。

path = avi.http.get_path()
if string.contains(path, "/finance/") then
   avi.http.response(401)
end

string.endswith

函数

string.endswith(source, target)

描述

检查源字符串是否以目标字符串结尾。

事件

全部。

参数

source 是要检查的字符串。

target 是源要与之匹配的字符串。

返回

如果源字符串以目标字符串结尾,则返回布尔值 true,否则返回 false

示例

如果路径以 /secure/ 结尾,则禁止访问。

path = avi.http.get_path()
if string.endswith(path, "/secure/") then
   avi.http.response(403)
end

string.len

函数

string.len(source)

描述

返回源字符串的字符数。

事件

全部。

参数

source 是要检查的字符串。

返回

数值。

示例

记录客户端请求路径中的字符数。

avi.vs.log(string.len(avi.http.get_path()))

string.lower

函数

string.lower(source)

描述

将源字符串全部转换为小写字符。VMware NSX Advanced Load Balancer 运算符区分大小写,a 不等于 A

事件

全部。

参数

source 是要转换的字符串。

返回

小写的源字符串。

示例

将 HTTP 路径中的字符串求求值为全部小写字符。

if string.lower(avi.http.get_path()) == "/sales" then    ...

string.split

函数

string.split (source_string, delimiter)

source_string:split (delimiter)

描述

使用用户提供的分隔符将字符串解析为多个子字符串,并在与找到的子字符串数量相等的 Lua 维度表中返回这些字符串。

事件

全部。

参数

source_string 是要拆分的字符串。

delimiter 是用于解析 source_string 的单个字符。

返回

如果 source_stringdelimiter 为 nil,将返回 NIL。

否则,将返回一个 Lua 表,其中包含与 source_string 对应的元素,但按每次出现的分隔符进行拆分。

如果 source_string 中未出现 delimiter,则返回的表将只有一个元素,即完整的 source_string

示例

URI 示例

example_string = "www.example.com/this/is/an/example/uri" split_results = string.split(example_string, "/") avi.vs.log(split_results[6])

在上面的示例中,split_results 是一个包含以下内容的表:

split_results[1] → "www.example.com" split_results[2] → "this" split_results[3] → "is" split_results[4] → "an" split_results[5] → "example" split_results[6] → "uri" 

因此,将在请求日志中记录字符串“uri”。

拆分缺失示例

example_string = "This string is just a sentence." split_results = example_string:split(":") avi.vs.log(split_results[1])
注:

1. 在上述函数引用中,将丢弃函数名称的前缀。

2. 由于 example_string 不包含冒号分隔符,因此其所有字符都将记录在请求日志中,即输出将为“This string is just a sentence.”。

string.sub

函数

string.sub(source, begin, [end])

描述

从源字符串中提取字符串的一部分。字符的计数从 1 开始,1 表示第 1 个字符,2 表示第二个字符,以此类推。字符也可能为负数。因此,-1 是源字符串的最后一个字符,-2 是倒数第二个字符,以此类推。

事件

全部。

参数

source 是要检查的字符串。

begin 是期望结果的第一个字符。

end 是期望结果的最后一个字符。如果未指定 end,新字符串将从 begin 开始一直到最后一个字符。

返回

原始字符串的一部分。可以返回整个原始字符串,或者如果未找到匹配项,将返回 nil

示例 1

提取第 2 个到第 4 个字符。

var = "abcdef" 
avi.vs.log(string.sub(var, 2, 4))

DataScript 日志:[string "Test-Rule"]:2: bcd

示例 2

从字符串中提取字符,从倒数第 99 个字符开始一直到倒数第 2 个字符为止。

var = "abcdef" 
avi.vs.log(string.sub(var, -99, 2))

DataScript 日志:[string "Test-Rule"]:2: abcde

示例 3

使用更改过的字符串更新变量。路径始终以“/”开头,将在规则求值之前被移除。

path = avi.http.get_path() 
path = string.sub(path, 2) 
if path == "index.html" ...

示例 4

以下示例可用于防止 Shell Shock 攻击。此攻击嵌入了以 () 字符开头的客户端标头。

headers = avi.http.get_header()               
for key,val in pairs(headers) do                
if #val > 2 and string.sub(val, 1, 2) == "()" then   
avi.http.close_conn()       
 end
end  

string.upper

函数

string.upper(source)

描述

将源字符串全部转换为大写字符。VMware NSX Advanced Load Balancer 运算符区分大小写。“a”不等于“A”。此命令不区分大小写。

事件

全部。

参数

source 是要转换的字符串。

返回

大写的源字符串。

示例

将客户端的路径求值为大写字符。客户端可能已发送 /Sales/sales/SaLeS。所有组合都会被标记为 true

if string.upper(avi.http.get_path()) == "/SALES" then    ...