ESA rule menyediakan fungsi untuk mengoperasikan dan memvalidasi nilai dalam ekspresi. Fungsi-fungsi ini mencakup fungsi transformasi yang beroperasi pada nilai yang diambil dari permintaan HTTP.
Fungsi transformasi yang didukung oleh rule
concat
Menggabungkan string.
Format:
concat(String | Integer | Bytes | Array elements):String.Logika: Menerima daftar nilai yang dipisahkan koma dan menggabungkannya menjadi satu string.
Contoh:
concat("String1"," ","String",2)mengembalikan"String1 String2".concat("/archive",http.request.uri.path)menambahkan segmen path"/archive"ke path URI.concat("userid=123&",http.request.uri.query)menambahkan pasangan kunci-nilai"userid=123"ke string kueri URI.concat("https://www.example.com",http.request.uri.path)menggabungkan hostname baru dengan path permintaan asli untuk menghasilkan URL baru.
ends_with
String berakhir di sini.
Format:
ends_with(source String,substring String):Boolean.Logika:
Mengembalikan
truejikasource Stringdiakhiri olehsubstring String. Jika tidak, mengembalikanfalse.source Stringharus berupa field. Nilai tersebut tidak boleh berupa string literal. Misalnya, jangan menulisends_with("foo.html",".html").
Contoh: Jika
http.request.uri.pathadalah"/welcome.html", makaends_with(http.request.uri.path,".html")mengembalikantrue.
lower
Mengonversi string menjadi huruf kecil.
Format:
lower(String):StringLogika: Mengonversi output string dari suatu field menjadi huruf kecil. Hanya karakter ASCII huruf besar yang dikonversi. Semua karakter lain tetap tidak berubah.
Contoh: Jika
http.hostadalah"WWW.example.com", makalower(http.host)=="www.example.com"mengembalikantrue.
regex_replace
Mengganti substring yang sesuai dengan pola ekspresi reguler.
Format:
regex_replace(source String,regular_expression String,replacement String):String.Logika pemrosesan:
Mengganti kemunculan pertama substring yang sesuai dengan ekspresi reguler menggunakan string pengganti, lalu mengembalikan hasilnya.
Secara default, pencocokan bersifat case-sensitive.
Hanya kecocokan pertama yang diganti, meskipun terdapat beberapa kecocokan dalam string sumber.
Anda dapat melakukan escape karakter
$dalam string pengganti dengan menambahkan karakter$lain di depannya.String pengganti dapat berisi referensi ke capturing group ekspresi reguler menggunakan format
${<NUMBER>}, di mana<NUMBER>adalah nomor capturing group tersebut. Maksimal delapan referensi semacam ini didukung, seperti${1}dan${2}.
Contoh:
Pencocokan dan penggantian karakter statis:
Pencocokan string berhasil:
regex_replace("/animal/cat","/cat$","/dog")=="/animal/dog".Jika tidak ditemukan kecocokan, string sumber tetap tidak berubah:
String berbeda:
regex_replace("/x","^/y$","/z")=="/x".String case-sensitive:
regex_replace("/cat","^/CAT$","/dog")=="/cat".
Ketika terdapat beberapa kecocokan, hanya yang pertama yang diganti:
regex_replace("/a/a","/a","/b")=="/b/a".Melakukan escape karakter
$dalam string pengganti:regex_replace("/b","^/b$","/b$$")=="/b$".Menggunakan capturing group dalam string pengganti:
regex_replace("/foo/a/path","^/foo/([^/]*)/(.*)$","/bar/${2}/${1}")=="/bar/path/a".
Pencocokan dan penggantian field dinamis:
String sumber menggunakan field dinamis untuk mengambil informasi path dari permintaan client. Contoh ini mengganti
/cat/dalam path dengan/dog/:regex_replace(http.request.uri.path,"/cat/(.*)$","/dog/${1}").Contoh penggantian kompleks: Mengganti setiap karakter
+dalam path permintaan asli dengan string%2B:regex_replace(http.request.uri.path, "^([^+]*)\\+([^+]*)\\+(.*)$", "${1}%2B${2}%2B${3}").
starts_with
Dimulai dengan
Format:
starts_with(source String,substring String):BooleanLogika:
Mengembalikan
truejikasource Stringdiawali olehsubstring String. Jika tidak, mengembalikanfalse.source Stringharus berupa field. Nilai tersebut tidak boleh berupa string literal. Misalnya, jangan menulisstarts_with("foo.html",".html").
Contoh: Jika
http.request.uri.pathbernilai"/welcome.html", makastarts_with(http.request.uri.path,".html")mengembalikantrue.
to_string
String keluaran.
Format:
to_string(Integer | Boolean | IP address):String.Logika: Mengembalikan representasi string dari nilai
Integer,Boolean, atau alamatIP.Contoh:
Jika hasil dari
ip.src.asnumadalah15169, makato_string(ip.src.asnum)mengembalikan"15169".Jika hasil dari
ssladalahtrue, makato_string(ssl)mengembalikan"true".Jika hasil dari
ip.srcadalah192.168.0.1, makato_string(ip.src)mengembalikan"192.168.0.1".
upper
Mengonversi string menjadi huruf besar.
Format:
upper(String):String.Logika: Mengonversi output string dari suatu field menjadi huruf besar. Hanya karakter ASCII huruf kecil yang dikonversi. Semua byte lain tetap tidak berubah.
Contoh: Jika
http.hostadalah"www.example.com", makaupper(http.host)mengembalikan"WWW.EXAMPLE.COM".
wildcard_replace
Pencocokan string menggunakan karakter wildcard.
Format:
wildcard_replace(source Bytes,wildcard_pattern Bytes,replacement Bytes,flags Bytes optional):StringLogika:
Mencocokkan string sumber terhadap pola yang berisi nol atau lebih karakter wildcard
*. Fungsi ini mengganti bagian yang cocok dengan string pengganti dan mengembalikan hasilnya. String pengganti dapat berisi referensi ke capturing group wildcard, seperti${1}dan${2}. Maksimal delapan referensi pengganti didukung.Jika tidak ada kecocokan, fungsi mengembalikan string sumber asli.
Parameter
sourceharus berupa field, bukan string literal. Selain itu, seluruh nilai `source` harus cocok dengan parameter `wildcard_pattern`. Fungsi ini tidak dapat mencocokkan hanya sebagian dari nilai field.Untuk memasukkan karakter literal
*dalam parameterwildcard_pattern, Anda harus melakukan escape-nya dengan\*. Anda juga harus melakukan escape karakter\dengan\\. Dua karakter*yang tidak di-escape secara berurutan, seperti**, tidak valid dan tidak dapat digunakan. Untuk melakukan escape karakter, gunakan sintaks raw string untuk parameterwildcard_pattern.Untuk memasukkan karakter literal
$dalam parameterreplacement, Anda harus melakukan escape-nya dengan$$.Untuk melakukan pencocokan wildcard case-sensitive, atur parameter
flagskes.Fungsi ini menggunakan lazy matching. Setiap metakarakter * mencocokkan string terpendek yang mungkin.
Contoh:
Jika URI lengkap adalah
https://apps.example.com/calendar/admin?expand=true, ekspresiwildcard_replace(http.request.full_uri,"https://*.example.com/*/*","https://example.com/${1}/${2}/${3}")mengembalikanhttps://example.com/apps/calendar/admin?expand=true.Jika URI lengkap adalah
https://example.com/applications/app1, ekspresiwildcard_replace(http.request.full_uri,"/applications/*","/apps/${1}")mengembalikanhttps://example.com/applications/app1. Nilainya tidak berubah karena ekspresi wildcard tidak cocok dengan URI lengkap. Gunakan fieldhttp.request.uri.pathuntuk pencocokan path URI.Jika path URI adalah
/calendar, ekspresiwildcard_replace(http.request.uri.path,"/*","/apps/${1}")mengembalikan/apps/calendar.Jika path URI adalah
/Apps/calendar, ekspresiwildcard_replace(http.request.uri.path,"/apps/*","/${1}")mengembalikan/calendar. Pencocokan bersifat case-insensitive secara default.Jika path URI adalah
/Apps/calendar, ekspresiwildcard_replace(http.request.uri.path,"/apps/*","/${1}","s")mengembalikan/Apps/calendar. Parameterflagsdiatur kesuntuk mengaktifkan pencocokan case-sensitive. Karena pola tidak cocok dengan path URI asli, hasilnya tetap tidak berubah.Jika path URI adalah
/apps/calendar/login, ekspresiwildcard_replace(http.request.uri.path,"/apps/*/login","/${1}/login")mengembalikan/calendar/login.