DataScript 中提供了以下字符串函数:
字符串 |
描述 |
---|---|
在字符串开头搜索字符串。 |
|
搜索在一个字符串中包含的另一个字符串。 |
|
在字符串末尾搜索字符串。 |
|
返回字符串中的字符数。 |
|
将字符串更改为小写。 |
|
将一个字符串解析为多个子字符串。 |
|
从字符串中提取子字符串。 |
|
将字符串更改为大写。 |
string.beginswith
函数 |
string.beginswith(source, target) |
描述 |
检查源字符串是否以目标字符串开头。 |
事件 |
全部。 |
参数 |
source 是要检查的字符串。 target 是源要与之匹配的字符串。 |
返回 |
如果源字符串以目标字符串开头,则返回布尔值 |
示例 |
如果路径以 /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 是源要与之匹配的字符串。 |
返回 |
如果源字符串以目标字符串结尾,则返回布尔值 |
示例 |
如果路径以 /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_string 或 delimiter 为 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 开始一直到最后一个字符。 |
返回 |
原始字符串的一部分。可以返回整个原始字符串,或者如果未找到匹配项,将返回 |
示例 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 是要转换的字符串。 |
返回 |
大写的源字符串。 |
示例 |
将客户端的路径求值为大写字符。客户端可能已发送 if string.upper(avi.http.get_path()) == "/SALES" then ... |