В действиях по модификации параметров вызова одним из основных элементов для корректировки является изменение цифр номера абонента А или Б.
Существуют разные подходы к способу описания синтаксиса такой модификации: модификация на шаблонах, регулярные выражения и т.п.

Регулярные выражения являются самым гибким способом, позволяющим делать все возможные преобразования, но у него есть существенные недостатки:

  • сложность синтаксиса — регулярные выражения — это универсальный механизм, используемый в разных сферах IT. Обладает своим сложным языком описания, что повышает входной порог знаний человека, который их использует;
  • вычислительная сложность — вычисление результата модификации на базе регулярных выражений (в том числе в перекомпилированном варианте) требует больших вычислительных ресурсов по сравнению с модификацией на шаблонах.

Чтобы избавится от недостатков регулярных выражений, в системе ECSS-10 используется модификация номера на шаблонах.

При модификации номера используется следующая нотация:

  • каждая цифра исходного номера (до модификации) обозначается либо числом описывающим ее позицию, либо буквой английского алфавита на соответствующей позиции (исходный семизначный номер без изменения можно записать в виде: "1,2,3,4,5,6,7" или "abcdefg");
  • как и в условиях срабатывания правил, поддерживается спец символ "%", который означает ту часть номера, которая соответствует символу % в секции <conditions> (можно считать, что на этапе условия правила для соответствующего номера формируется переменная с именем "%", которая заполняется цифрами номера, а на этапе модификации она используется);
  • для того чтобы была возможность модифицировать номер (абонента А или абонента Б), он обязательно должен присутствовать в элементе <conditions> правила (это гарантирует соблюдение формата номера);
  • для того чтобы были возможны модификации с определенными цифрами в номере, в элементе <conditions> в условии для соответствующего номера цифры на требуемых позициях должны присутствовать либо сами цифры номера (шаблон по цифрам), либо цифры должны быть закрыты спецсимволами "?";
  • для правил, обрабатывающих номер произвольной длины (в элементе <conditions> для цифр номера стоит условие со спец символом "%"), возможно только префиксирование (дописывание дополнительного префикса), либо постфиксирование (дописывание постфикса в конце номера);
  • если необходимо вставить дополнительные цифры, которые не входили в исходный номер, то они просто записываются в поле "digits" в нужной позиции, поддерживается указание собственно цифр номера от 0 до 9 и букв A, B, C, D (либо a,b,c,d);
  • если требуется записать элементы исходного номера в виде кодов (номеров позиции, либо буквенных кодов), либо в виде спец символа "%", то они записываются в фигурных скобках (например {abc}, либо {3,5,4}, либо {5,%};
  • если требуется скопировать часть цифр из cgpn в cdpn, rgn, ocdpn (аналогично для остальных типов номеров), которые совпали в рамках секции conditions, в секции actions используется [cgpn|cdpn|rgn|ocdpn{DIGITS,%}].

Примеры:

Удаление префикса 345 от десятизначного номера:

<conditions>
  <cgpn digits="345???????"/>
</conditions>
<actions>
  <cgpn digits="{4,5,6,7,8,9,10}"/>
</actions>
CODE

Удаление префикса 345 от номера произвольной длины с префиксом 345:

<conditions>
  <cgpn digits="345%"/>
</conditions>
<actions>
  <cgpn digits="{%}"/>
</actions>
CODE

Перестановка цифр 2 и 3 в трехзначном номере (сами цифры любые):

<conditions>
  <cgpn digits="???"/>
</conditions>
<actions>
  <cgpn digits="{1,3,2}"/>
</actions>
CODE

Префиксирование произвольного трехзначного номера с префиксом 008:

<conditions>
  <cgpn digits="???"/>
</conditions>
<actions>
  <cgpn digits="008{1,2,3}"/>
</actions>
CODE

Замена местами cdpn и cgpn:

<conditions> 
<cgpn digits="%"/> 
<cdpn digits="%"/> 
</conditions> 
<actions> 
<cgpn digits="[cdpn{%}]"/> 
<cdpn digits="[cgpn{%}]"/> 
</actions> 
CODE

Правило, которое может использоваться для выхода на междугородную станцию. В частности видно, что правило сработает для вызовов, в которых у абонента А семизначный местный номер, номер абонента Б начинается на 8. Задача модификации преобразовать местный номер к междугородному, который понимает междугородка, для этого дописывается префикс и меняется «ni» и «nai». Номер Б не изменяется, его разбором занимается междугородка.

<conditions>
  <cgpn digits="???????" ni="local"/>
  <cdpn digits="8%"/>
</conditions>
<actions>
  <cgpn digits="8383{1,2,3,4,5,6,7}" ni="intercity" nai="nationalNumber"/>
</actions>
CODE