ESA ルールは、式の中の値を操作および検証するための関数を提供します。これには、HTTP リクエストから取得した値を操作する変換関数が含まれます。
ルールでサポートされる変換関数
concat
文字列を連結します。
フォーマット:
concat(String | Integer | Bytes | Array elements):String。ロジック:コンマ区切りの値のリストを受け取り、それらを 1 つの文字列に連結します。
例:
concat("String1"," ","String",2)は"String1 String2"を返します。concat("/archive",http.request.uri.path)は、URI パスの先頭にパスセグメント"/archive"を追加します。concat("userid=123&",http.request.uri.query)は、URI クエリ文字列の先頭にキーと値のペア"userid=123"を追加します。concat("https://www.example.com",http.request.uri.path)は、新しいホスト名と元のリクエストパスを組み合わせて、新しい URL を生成します。
ends_with
文字列はここで終了します。
フォーマット:
ends_with(source String,substring String):Boolean。ロジック:
ソース文字列が部分文字列で終わる場合は、trueを返します。それ以外の場合は、falseを返します。source Stringは、フィールドである必要があります。リテラル文字列であってはなりません。たとえば、ends_with("foo.html",".html")と記述しないでください。
例:
http.request.uri.pathが"/welcome.html"の場合、ends_with(http.request.uri.path,".html")はtrueを返します。
lower
文字列を小文字に変換します。
フォーマット:
lower(String):Stringロジック:フィールドの文字列出力を小文字に変換します。大文字の ASCII 文字のみが変換されます。他のすべての文字は変更されません。
例:
http.hostが"WWW.example.com"の場合、lower(http.host)=="www.example.com"はtrueを返します。
regex_replace
正規表現パターンに一致する部分文字列を置換します。
フォーマット:
regex_replace(source String,regular_expression String,replacement String):String。処理ロジック:
正規表現に一致する部分文字列の最初の一致箇所を置換文字列に置き換え、結果を返します。
デフォルトでは、大文字と小文字を区別して照合します。
ソース文字列に複数の一致箇所が存在する場合でも、最初の一致箇所のみが置換されます。
置換文字列内の
$文字をエスケープするには、別の$文字をプレフィックスとして追加します。置換文字列には、
${<NUMBER>}の形式で正規表現のキャプチャグループへのリファレンスを含めることができます。ここで、<NUMBER>はキャプチャグループの番号です。${1}や${2}など、最大 8 つのリファレンスがサポートされます。
例:
静的な文字の照合と置換:
文字列の照合に成功した場合:
regex_replace("/animal/cat","/cat$","/dog")=="/animal/dog"。一致が見つからない場合、ソース文字列は変更されません:
異なる文字列:
regex_replace("/x","^/y$","/z")=="/x"。大文字と小文字を区別する文字列:
regex_replace("/cat","^/CAT$","/dog")=="/cat"。
複数の一致が存在する場合、最初の一致のみが置換されます:
regex_replace("/a/a","/a","/b")=="/b/a"。置換文字列内の
$文字のエスケープ:regex_replace("/b","^/b$","/b$$")=="/b$"。置換文字列でのキャプチャグループの使用:
regex_replace("/foo/a/path","^/foo/([^/]*)/(.*)$","/bar/${2}/${1}")=="/bar/path/a"。
動的フィールドの照合と置換:
ソース文字列は、動的フィールドを使用してクライアントリクエストからパス情報を取得します。この例では、パス内の
/cat/を/dog/に置き換えます:regex_replace(http.request.uri.path,"/cat/(.*)$","/dog/${1}")。複雑な置換の例:元のリクエストパス内の各
+文字を文字列%2Bに置き換えます:regex_replace(http.request.uri.path, "^([^+]*)\\+([^+]*)\\+(.*)$", "${1}%2B${2}%2B${3}")。
starts_with
前方一致
フォーマット:
starts_with(source String,substring String):Booleanロジック:
source Stringがsubstring Stringで始まる場合、trueを返します。それ以外の場合、falseを返します。source Stringは、フィールドである必要があります。リテラル文字列にはできません。たとえば、starts_with("foo.html",".html")のように記述しないでください。
例:
http.request.uri.pathが"/welcome.html"の場合、starts_with(http.request.uri.path,".html")はtrueを返します。
to_string
文字列出力。
フォーマット:
to_string(Integer | Boolean | IP address):String。ロジック:
Integer、Boolean、またはIPアドレスの値の文字列表現を返します。例:
ip.src.asnumの結果が15169の場合、to_string(ip.src.asnum)は"15169"を返します。sslの結果がtrueの場合、to_string(ssl)は"true"を返します。ip.srcの結果が192.168.0.1の場合、to_string(ip.src)は"192.168.0.1"を返します。
upper
文字列を大文字に変換します。
フォーマット:
upper(String):String。ロジック:フィールドの文字列出力を大文字に変換します。小文字の ASCII 文字のみが変換されます。他のすべてのバイトは変更されません。
例:
http.hostが"www.example.com"の場合、upper(http.host)は"WWW.EXAMPLE.COM"を返します。
wildcard_replace
ワイルドカードによる文字列マッチング。
フォーマット:
wildcard_replace(source Bytes,wildcard_pattern Bytes,replacement Bytes,flags Bytes optional):Stringロジック:
0 個以上の
*ワイルドカード文字を含むパターンに対してソース文字列を照合します。一致した部分を置換文字列に置き換え、結果を返します。置換文字列には、${1}や${2}などのワイルドカードキャプチャグループへのリファレンスを含めることができます。最大 8 つのリファレンスがサポートされます。一致がない場合、この関数は元のソース文字列を返します。
sourceパラメーターはフィールドである必要があり、リテラル文字列は指定できません。さらに、`source` の値全体が `wildcard_pattern` パラメーターと一致する必要があります。フィールド値の一部のみと一致することはできません。wildcard_patternパラメーターにリテラルの*文字を入力するには、\*でエスケープする必要があります。また、\文字も\\でエスケープする必要があります。**のように、エスケープされていない*文字が 2 つ続くのは無効であり、使用できません。文字のエスケープを行うには、wildcard_patternパラメーターに raw 文字列構文を使用します。replacementパラメーターにリテラルの$文字を入力するには、$$でエスケープする必要があります。大文字と小文字を区別するワイルドカード照合を実行するには、
flagsパラメーターをsに設定します。この関数は遅延マッチングを使用します。各 * メタ文字は、可能な限り短い文字列に一致します。
例:
完全な URI が
https://apps.example.com/calendar/admin?expand=trueの場合、式wildcard_replace(http.request.full_uri,"https://*.example.com/*/*","https://example.com/${1}/${2}/${3}")はhttps://example.com/apps/calendar/admin?expand=trueを返します。完全な URI が
https://example.com/applications/app1の場合、式wildcard_replace(http.request.full_uri,"/applications/*","/apps/${1}")はhttps://example.com/applications/app1を返します。ワイルドカード式が完全な URI と一致しなかったため、値は変更されません。URI パスの照合にはhttp.request.uri.pathフィールドを使用してください。URI パスが
/calendarの場合、式wildcard_replace(http.request.uri.path,"/*","/apps/${1}")は/apps/calendarを返します。URI パスが
/Apps/calendarの場合、式wildcard_replace(http.request.uri.path,"/apps/*","/${1}")は/calendarを返します。デフォルトでは、照合時に大文字と小文字は区別されません。URI パスが
/Apps/calendarの場合、式wildcard_replace(http.request.uri.path,"/apps/*","/${1}","s")は/Apps/calendarを返します。flagsパラメーターがsに設定され、大文字と小文字を区別する照合が有効になっています。パターンが元の URI パスと一致しないため、結果は変更されません。URI パスが
/apps/calendar/loginの場合、式wildcard_replace(http.request.uri.path,"/apps/*/login","/${1}/login")は/calendar/loginを返します。