CGrateS can do inline regex replacement.
This is less of a blog post and more of a brain dump.
Strip + in phone number as an Attribute:
{
"result": {
"Tenant": "cgrates.org",
"ID": "Attribute_International",
"Contexts": [
"*any"
],
"FilterIDs": [
"*string:~*req.csv_11_dst_domain:international.numberportability.local"
],
"ActivationInterval": null,
"Attributes": [
{
"FilterIDs": [],
"Path": "*req.Category",
"Type": "*constant",
"Value": [
{
"Rules": "call_international"
}
]
},
{
"FilterIDs": [],
"Path": "*req.Destination",
"Type": "*variable",
"Value": [
{
"Rules": "~*req.Destination:s/^\\+(\\d+)/$1/"
}
]
}
],
"Blocker": false,
"Weight": 0
},
"error": null
}
These examples are from ERS where I’m reading from databases / CSVs / whatever.
This example strips a leading + on a phone number in the Subject field
{"tag": "Subject", "path": "*cgreq.Subject", "type": "*variable", "value":"~*req.src_user:s/^\\+(.*)$/$1/"}
This one replaces nicktest.com with mobile.operatorx.numberportability.local and after that replaces 10.171.2.134 with fixed.operatorx.numberportability.local
{"tag": "src_domain", "path": "*cgreq.src_domain", "type": "*variable", "value": "~*req.src_domain:s/^nicktest.com$/mobile.operatorx.numberportability.local/:s/^10.171.2.134$/fixed.operatorx.numberportability.local/"},
When the regular expressions are joined one after another like this, the output of the first regex is evaluated by the second regex rule, and so on.