Rules Syntax
A rule is a string that represents a boolean expression. It should be in the format <variable> <operator> <value>. Additionally, rules can be combined in the following format <rule> <logical expression> <rule>. Quotes inside the rules need to be escaped appropriately.
The following operators are supported:
Logical Expressions
| Operator |
Meaning |
Example |
!, not |
boolean "not" |
not(country = "US") |
or, ` |
, |
|
and, &, && |
boolean "and" |
age > 20 and age < 50 |
Relational Expressions
| Operator |
Meaning |
Example |
=, ==, is, eq |
equal to |
country = "US" |
~=, =~ |
loose equal to |
age ~= "20" |
<, lt |
less than |
age < 50 |
>, gt |
greater than |
age > 20 |
<= |
less than or equal |
age <= 50 |
>= |
greater than or equal |
age >= 20 |
in |
present in list of items |
country in ["US", "FR"] |
in |
present in range of values |
age in 20 to 50 |
Quantifiers
| Operator |
Meaning |
Example |
oneOf |
group of boolean "or"s |
oneOf(country = "US", age < 50) |
allOf |
group of boolean "and"s |
allOf(age > 20, age < 50) |
exists |
first-order "or" operator |
exists(c:countries, c == "US") |
forAll |
first-order "and" operator |
forAll(p:purchases, p > 50) |
String Expressions
| Operator |
Meaning |
Example |
contains |
string contains |
user-agent contains "Chrome" |
startsWith |
string startsWith |
user-agent startsWith "Chrome" |
endsWith |
string endsWith |
user-agent endsWith "81" |
matches |
string matches regex |
`user-agent matches /^(Chrome |
containsWord |
string contains word |
category containsWord "summer" |
info
The containsWord operator ensures to match "whole words" only taking into account word boundaries.
A word boundary is any character that is not a-z, A-Z, 0-9, _ including or excluding diacritics.
Array Expressions
| Operator |
Meaning |
Example |
containsAll |
array contains all elements |
ids containsAll [1, 2, 3] |
containsAny |
array contains any element |
ids containsAny [1, 2, 3] |
containsAllWords |
array contains all words |
categories containsAllWords ["Summer", "Sale"] |
containsAnyWord |
array contains any word |
categories containsAnyWord ["Summer", "Sale"] |
info
The containsAllWords and containsAnyWord operators ensure to match "whole words" only taking into account word boundaries.
Geo Expressions
| Operator |
Meaning |
Example |
near by |
value near coordinate |
userCoordinates near [41.176296, -8.596050] by 30 km |
Date Expressions
| Operator |
Meaning |
Example |
after |
timestamp is after x days |
lastPurchase after 7 days ago |
before |
timestamp is before x days |
lastPurchase before 3 days ago |
between |
timestamp is between x and y days |
lastPurchase between 3 and 7 days ago |
Built-In Functions
| Function |
Meaning |
Example |
isDefined |
returns true if a variable is defined |
isDefined(country) |
normalize |
returns the string in lowercase without combining diacritics |
normalize(category) |
toString |
attempts to convert a value to a string |
toString(status) |
toNumber |
attempts to convert a value to a number |
toNumber(productId) |
toBoolean |
attempts to convert a value to a boolean |
toBoolean(promotion) |
map |
returns a new list with the elements updated based on the expression provided |
map(x:products, x["id"]) |