***
title: 'Examples: String Utils'
position: 1
deprecated: false
hidden: false
metadata:
robots: index
-------------
## Evaluate a string with multiple elements
We want to evaluate a ticket description with multiple `STARTS_WITH`, but you do not want to write multiple `OR` operators in your rule that could make it bulky and hard to read. We can leverage the [ANY](/agent-studio/agent-studio/configuration-languages/dsl-reference/overview#any) stream operator to match our ticket with a list of strings or elements.
You can also leverage the [ALL](/agent-studio/agent-studio/configuration-languages/dsl-reference/overview#all) operator in case you want `AND` conditions.
### Given
```python
list_of_prefixes = ["Mr.", "Mrs.", "Dr."]
ticket.requestor.name = "Dr. Jane Doe"
```
### To check against all prefixes
```python
list_of_prefixes.$ANY(prefix => ticket.requestor.name.$STARTS_WITH(prefix))
# OR
["Mr.", "Mrs.", "Dr."].$ANY(prefix => ticket.requestor.name.$STARTS_WITH(prefix))
```
### Expected Result
```python
true
```
## String Special Character Detection
Check if a string contains any characters that are not alphabetic letters or whitespace.
### DSL Expression
```
text.$MATCH("[^a-zA-Z\\s]+", true).$LENGTH() > 0
```
**This DSL:**
* Searches for one or more consecutive non-letter, non-whitespace characters
* Returns `true` if any numbers or special characters are found
* Returns `false` if the string contains only letters and whitespace
### Use Cases
* Form validation to ensure text fields contain only alphabetic characters
* Identifying inputs that might require special handling or escaping
* Security checks for potentially unsafe character sequences
### Examples
| Input | Result | Reason |
| ---------------- | ------- | -------------------------------- |
| `"Hello world"` | `false` | Contains only letters and spaces |
| `"Hello123"` | `true` | Contains numbers |
| `"Hello!"` | `true` | Contains special characters |
| `"Hello world!"` | `true` | Contains special characters |
## Make all elements in a list lowercase
We usually create whitelists for users that want to test a certain skill or sometimes remove access to a list of people. We would want to evaluate all users in lowercase since sometimes emails or other attributes may contain capital letters. A way to lowercase an element is by using the `.$LOWERCASE()` formatter but it's not scalable if you have a list of hundreds of users. Here's how you can do it better.
### Given
```python
emails = ["HeLlo", "WoRld"]
```
### To lowercase all elements
```python
emails.$MAP(email => email.$LOWERCASE())
# or
["HeLlo", "WoRld"].$MAP(email => email.$LOWERCASE())
```
### Expected Result
```python
["hello", "world"]
```
## Generate a hyphenated "Random" Number
This expression creates a pseudo-random number string formatted as a hyphen-separated sequence.
```
$CONCAT([($TIME().$INTEGER() * 6).$TEXT()[7:12], ($TIME().$INTEGER() * 12).$TEXT()[7:12],($TIME().$INTEGER() * 7).$TEXT()[7:12],($TIME().$INTEGER() * 23).$TEXT()[7:12]],"-")
```
**This DSL:**
* Uses the current timestamp (`$TIME().$INTEGER()`) as a seed value
* Multiplies by different prime-like numbers (6, 12, 7, 23) to create variation
* Converts results to text and extracts specific digits using substring selection `[7:12]`
* Concatenates the four number segments with hyphens as separators
### How It Works
`$TIME().$INTEGER()` gets the current Unix timestamp in milliseconds
Multiplication by different factors produces varied number sequences
`.$TEXT()[7:12]` converts to text and extracts a consistent 4-digit segment
`$CONCAT(..., "-")` joins the segments with hyphens
### Example Output
```
"3542-7084-5799-1911"
```
### Use Cases
* Generating reference numbers or transaction IDs
* Creating pseudo-random identifiers without requiring cryptographic security
* Producing readable, hyphenated codes for display purposes
Not cryptographically secure -- uses deterministic operations on time values. Will produce different values on each evaluation as time changes.