The following String functions are available in DataScripts:

String

Description

string.beginswith((source, target)

Search for string in beginning of a string.

string.contains(source, target)

Search contains a string in another string.

string.endswith(source, target)

Search for string at the end of a string.

string.len(source)

Returns number of characters in string.

string.lower (source)

Change a string to lower case.

string.split(source_string, delimiter)

Parses a string into substrings.

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

Extract a sub-string from a string.

string.upper(string.upper( source )

Change a string to upper case.

string.beginswith

Function

string.beginswith(source, target)

Description

Check if the source string begins with the target string.

Events

All.

Parameter

source is the string to be checked.

target is the string, the source is matched against.

Returns

Boolean true if the source string begins with the target string, else false.

Example

If the path starts with /sales/ redirect to a new URL.

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

string.contains

Function

string.contains(source, target)

Description

Check if the source string contains the target string.

Events

All.

Parameter

source is the string to be checked.

target is the string, the source is matched against.

Returns

Boolean true if the source string contains the target string, else false.

Example

If the path contains /finance/ prompt client for authentication.

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

string.endswith

Function

string.endswith(source, target)

Description

Check if the source string ends with the target string.

Events

All.

Parameter

source is the string to be checked.

target is the string, the source is matched against.

Returns

Boolean true if the source string ends with the target string, else false.

Example

If the path ends with /secure/ forbid access.

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

string.len

Function

string.len(source)

Description

Returns the number of characters of the source string.

Events

All.

Parameter

source is the string to be checked.

Returns

Numeric value.

Example

Log the number of characters from the path of the client's request.

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

string.lower

Function

string.lower(source)

Description

Converts the source string to all lowercase characters. The VMware NSX Advanced Load Balancer operators are case sensitive, a does not equal A.

Events

All.

Parameter

source is the string to be converted.

Returns

The source string in lowercase.

Example

Evaluate a string from the HTTP path as all lower case characters.

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

string.split

Function

string.split (source_string, delimiter)

source_string:split (delimiter)

Description

Using a user-supplied delimiter, parses a string into substrings, and returns them in a Lua table of dimension equal to the number of substrings found.

Events

All.

Parameter

source_string is the string to split.

delimiter is a single character by which to parse source_string.

Returns

If either source_string or delimiter is nil, returns NIL.

Otherwise, returns a Lua table with elements corresponding to source_string, but split by each occurrence of delimiter.

If there are no occurrences of delimiter in source_string, the table returned will have only one element, namely, the full source_string.

Example

URI example

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

In the above example, split_results is a table containing:

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" 

Consequently, the character string "uri" will be logged in the request logs.

Split miss example

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

1. In the above function reference, the prefix of the function name is dropped.

2. As example_string does not contain the colon delimiter, all its characters will be logged in the request logs, i.e., the output will be - "This string is just a sentence."

string.sub

Function

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

Description

Extracts part of a string from a source string. Characters are count starting with a 1 for the first character, 2 for the second, etc. Characters may also be negative. So -1 is the last character of the source string, -2 is the second to last, etc.

Events

All.

Parameter

source is the string to be inspected.

begin is the first character for the desired result.

end is the final character for the desired result. If no end is specified, the new string will be from the begin till the last character.

Returns

A portion of the original string. Can return the entire original string, or nil if no match is found.

Example 1

Extract the 2nd through the 4th characters.

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

DataScript Log: [string "Test-Rule"]:2: bcd

Example 2

Extract characters from the string, starting from the 99th to last till the 2nd to last.

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

DataScript Log: [string "Test-Rule"]:2: abcde

Example 3

Update a variable with the altered string. A path always starts with a '/', which is removed prior to rule evaluation.

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

Example 4

The following example can be used to prevent a Shell Shock attack. This attack embeds a client header which starts with () characters.

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

Function

string.upper(source)

Description

Converts the source string to all uppercase characters. The VMware NSX Advanced Load Balancer operators are case sensitive. An "a" does not equal "A". This command enables case insensitivity.

Events

All.

Parameter

source is the string to be converted.

Returns

The source string in uppercase.

Example

Evaluate the client's path as upper case characters. Client might have sent /Sales, /sales, or /SaLeS. All the combinations are marked true.

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