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 文字列で始まるかどうかを確認します。

イベント

すべて。

パラメータ

source はチェックする文字列です。

target は文字列で、source と照合されます。

戻り値

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 文字列が含まれるかどうかを確認します。

イベント

すべて。

パラメータ

source はチェックする文字列です。

target は文字列で、source と照合されます。

戻り値

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 文字列で終わるかどうかを確認します。

イベント

すべて。

パラメータ

source はチェックする文字列です。

target は文字列で、source と照合されます。

戻り値

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 文字列の文字数を返します。

イベント

すべて。

パラメータ

source はチェックする文字列です。

戻り値

数値。

クライアントの要求のパスから文字数をログに記録します。

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

string.lower

機能

string.lower(source)

説明

source 文字列をすべて小文字に変換します。VMware NSX Advanced Load Balancer の演算子では大文字と小文字が区別されます。aA と等しくありません。

イベント

すべて。

パラメータ

source は変換する文字列です。

戻り値

小文字の 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 を返します。

それ以外の場合は、source_string に対応する要素を持つ Lua テーブルを返しますが、区切り文字ごとに分割されます。

source_string に delimiter がない場合、返されるテーブルには 1 つの要素、つまり 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])

説明

source 文字列から文字列の一部を抽出します。文字数は、最初の文字は 1、2 番目の文字は 2 のように数えます。文字は負の値になる場合もあります。この場合、-1 は source 文字列の最後の文字、-2 は最後から 2 番目などです。

イベント

すべて。

パラメータ

source は検査する文字列です。

begin は必要な結果の最初の文字です。

end は必要な結果の最後の文字です。end が指定されていない場合、新しい文字列は begin から最後の文字までになります。

戻り値

元の文字列の一部。元の文字列全体を返すか、一致するものが見つからない場合は nil を返します。

例 1

2 番目から 4 番目の文字を抽出します。

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

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

例 2

最後から 99 番目から最後から 2 番目からまでの文字を、文字列から抽出します。

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

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

例 3

変更された文字列を使用して変数を更新します。パスは常に「/」で始まり、ルールの評価の前に削除されます。

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

例 4

次の例は、ShellShock 攻撃を防ぐために使用できます。この攻撃は、() の文字で始まるクライアント ヘッダーを組み込みます。

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)

説明

source 文字列をすべて大文字に変換します。VMware NSX Advanced Load Balancer の演算子では大文字と小文字が区別されます。「a」は「A」と等しくありません。このコマンドにより、大文字と小文字が区別されなくなります。

イベント

すべて。

パラメータ

source は変換する文字列です。

戻り値

大文字の source 文字列。

クライアントのパスを大文字として評価します。クライアントが /Sales/sales、または /SaLeS を送信した可能性があります。すべての組み合わせは true としてマークされます。

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